直入重点:
一、关于获取设备上下文HDC的各种方法和区别
1、基本的Windows操作HDC
HDC _hdc = ::GetDC( m_hWnd ); // 假定m_hWnd有效
...
::ReleaseDC( m_hWnd, _hdc );
2、基于CView的HDC操作
HDC _hdc = GetDC();
...
ReleaseDC( _hdc );
3、关于MFC的CDC操作
CDC * _cdc = GetDC();
...
ReleaseDC( _cdc );
4、关于MFC的CClientDC操作:CClientDC 的构造函数 直接获取HDC句柄;析构函数则进行了释放,所以不用再操心HDC的事情啦
CClientDC _ccdc( m_hWnd );
...
ReleaseDC( _ccdc );
5、关于获取4的父窗口
CClientDC _ccdc( GetParentDC() );
...
ReleaseDC( _ccdc );
6、关于窗口CWindowDC的操作
CWindowDC _winDC ( this/m_hWnd/GetParentDC()/GetDeskTopWindow() );
...
ReleaseDC( _winDC );
二、关于画笔、画刷、位图的操作
1、画笔
CPen pen( PS_SOLID, 1, RGB( 255, 0, 0 ) );
....记得选入设备和最后选回逻辑画笔
2、画刷
(1) 普通画刷
CBrush brush( RGB( 255,0,0 ) );
....
(2) 位图画刷
CBitmap bitmap;
bitmap.LoadBitmap( ID );
CBrush brush( &bitmap );
....
(3) 透明画刷
CBrush*brush = FromHandle( (HBRUSH)GetStockObject( NULL_BRUSH ) );
...