VC中临时窗口与持久窗口的对比

    今天结合着书看完了孙鑫的VC++深入详解的第九课,最后提出一个问题,即临时窗口与持久窗口的对比。

    在MFC中,都是以C++对象来操作窗口,而窗口是用句柄来标识的,这样就需要将窗口和C++对象关联起来,通过C++对象的成员变量m_hWnd来建立这种联系。如果一个窗口对象和一个窗口相关联了,那么我们要获取这个窗口对象(通常都是CWnd*形式),返回的就是一个持久的C++对象,如果你要获取一个窗口(不是通过MFC类库创建的)的C++对象,那么MFC就会为你临时创建一个C++对象,返回其指针,这就是一个临时的对象。作为临时对象,它在产生它的函数中有效,例如:你在OnMouseMove中获取到一个临时对象的指针,那么它在OnMouseMove函数中是有效的,但出来这个函数,就不一定了,因为在Windows消息循环的空闲时间,临时对象将会被删除。

例如:CWnd cwnd;cwnd.create(...);cwnd.detach();假定cwnd是局部对象,当cwnd释放的时候,窗口仍然存在,然后CWnd::FromHandle(hwnd),这时返回就是临时对象的指针。

 
原文地址:https://www.cnblogs.com/javaadu/p/11742761.html