石家庄新钥匙做网站,怎样建网站卖东西,wordpress demo data,推广方式营销方案一、Windows对象和MFC对象的区别#xff1f;MFC对象实际上并没有把整个Windows对象都包装在其中。对于窗口#xff1a;MFC对象它只是有一个窗口句柄而已#xff0c;这个窗口句柄如果指向一个实际存在的窗口对象#xff08;窗口对象#xff0c;也就是WNDCLASS#xff0c;是…一、Windows对象和MFC对象的区别MFC对象实际上并没有把整个Windows对象都包装在其中。对于窗口MFC对象它只是有一个窗口句柄而已这个窗口句柄如果指向一个实际存在的窗口对象窗口对象也就是WNDCLASS是一个Windows对象那么这个MFC对象就是有效的否则这个MFC对象是空的。如果你还不明白请回忆一下当我们使用MFC创建一个窗口时是分两步进行的第一步new一个CWnd对象这一步是创建MFC对象但是其中的HWND还是非法的因为对应的Windows对象还没有被创建出来第二步调用CWnd的成员函数Create创建真正的Windows对象同时把先前创建的MFC的CWnd对象的HWND成员指向该窗口这样才算创建完毕一个窗口。而如果你是用SDK方式那么只要创建一个WNDCLASS结构然后调用Create或者CreateEx就创建了一个窗口。 二、Attach Detach【Attach】 假设你已经有了一个有效窗口句柄那么你想把这个窗口和一个CWnd对象关联起来怎么办很简单用Attach其实就是让一个CWnd对象的HWND成员指向这个窗口句柄。这就是Attach主要完成的任务。 【Detach】如前所述WNDCLASS其实和CWnd根本没有什么关系。它们之间只是通过CWnd的成员HWND联系起来的。如果把Attach看做“联姻”的话那么Detach就是“离婚”了通俗地说就是切断一个CWnd对象和一个有效窗口的脐带。为什么要切断呢因为CWnd是C的对象C的对象有一个生存期的概念脱离了该对象的作用域这个对象就要被销毁但是Windows对象没有这个特点当销毁CWnd对象的时候我们不一定希望WNDCLASS一起被销毁那么在此之前我们就先要把这个“脐带”剪断以免“城门失火殃及池鱼”。Understand基本就是把一个句柄绑定和解绑定于一个类对象上是其可以使用MFC的函数而不是API 程序代码 if (oldbmp ! NULL) { wdc.SelectObject(oldbmp); } DeleteObject(bmp.Detach()); // bmp自定义的一个位图句柄 HBITMAP hdib CreateDIBSection(wdc.m_hDC,m_bmi,DIB_RGB_COLORS,(void**)m_pbyte,NULL,0); ASSERT(hdib); bmp.Attach(hdib);