1.CDC、CDCHandle只是CDCT<typename T>模板类的实例化,区别只是在析构时,一个会释放资源,一个不会。 typedef CDCT<false> CDCHandle; typedef CDCT<true> CDC; 2.CMemDC从CDC继承,除了构造函数与析构函数外没有其它成员函数 3.CDC的成员变量只有一个:m_hDC CMemDC有自己的更多的成员变量,同时还可以使用CDC的...
1.CDC、CDCHandle只是CDCT<typename T>模板类的实例化,区别只是在析构时,一个会释放资源,一个不会。 typedef CDCT<false> CDCHandle; typedef CDCT<true> CDC; 2.CMemDC从CDC继承,除了构造函数与析构函数外没有其它成员函数 3.CDC的成员变量只有一个:m_hDC CMemDC有自己的更多的成员变量,同时还可以使用CDC的...
Device context CDCT CDC CDCHandle Menu CMenuT CMenu CMenuHandle 相对于MFC围绕着对象指针封装的方法,我更喜欢WTL的方法:你不用总是担心得到一个NULL指针(封装的句柄也可能是NULL,但这是另一回事),也不用总是注意操作临时对象这种特殊情况(译者注:MFC有一个回收机制,总是试图释放使用FromHandle得到的临时对象)...
对于CString类我想说的是它等同与 MFC的CString类,我在后面的文章中还会介绍这些包装类,现在你只需要知道CDCHandle是对HDC的简单封装就行了,使用方法与MFC的 CDC类相似,只是CDCHandle的实例在超出作用域后不会销毁它所操作的设备上下文。 四、程序运行效果
3.GDI 对象的封装- CDC, CMenu 4.一些特殊的界面特性 - CSplitterWindow, CUpdateUI, CDialogResize, CCustomDraw 5.实用的工具类和宏- CString, CRect, BEGIN_MSG_MAP_EX 今天介绍下WTL的窗口类,任何非对话框窗口都是从CWindowImpl 派生的,对话框窗口派生自CDialogImpl或CAxDialogImpl,CDialogImpl 用于实现普通...
WTL是基于模板开发,模板是实现泛型编程的基础。可以将模板看成一种描述方式,用于描述一个类型的对象遵循模板类型对象的类型声明。 举个例子 //一个单纯的类Aclass A{voidfunctionA(){}}//一个单纯的类Bclass B{voidfunctionB(){}}//一个单纯的类Pclass P{voidfunctionP(){}}//准备一个遵循T模板的类Cte...
CDC dcMem; dcMem.CreateCompatibleDC ( dc ); dc.SaveDC(); dcMem.SaveDC();// Draw the button's background, red if it has the focus, blue if not.if( lpdis->itemState & ODS_FOCUS ) dc.FillSolidRect ( &lpdis->rcItem, RGB(255,0,0) ); ...
CDC: FillSolidRect() should restore background color GetClipRgn() method missing Printing: CPrinter::CreatePrinterDC() and CreatePrinterIC() members should be const CDevMode::CopyToHDEVMODE() is missing a call to GlobalUnlock() AppWizard: Use WTL subfolder to create WTL category for VC7.x...
CDC dcImage; dcImage.CreateCompatibleDC (NULL); HBITMAP hOldBmp = dcImage.SelectBitmap(*m_bmBitmap); // 得到位图的宽度和高度 BITMAP bm; m_bmBitmap->GetBitmap (&bm); // 得到窗口的宽度和高度 CRect rc; GetClientRect (rc);
class CPaintDC : public CDC { public: // Data members HWND m_hWnd; PAINTSTRUCT m_ps; // Constructor/destructor CPaintDC(HWND hWnd) { ATLASSERT(::IsWindow(hWnd)); m_hWnd = hWnd; m_hDC = ::BeginPaint(hWnd, &m_ps); } ~CPaintDC() { ATLASSERT(m_hDC != NULL); ATLASSERT(::IsWindow...