MFC遇到一个令我困惑的现象,和大家讨论(难度较高)
我在theApp的InitInstance()中的return TRUE之前加入这样一句:
((CFrameWnd*)m_pMainWnd)->GetActiveView()->CloseWindow();
也就是初始化结束后把view给closewindow。
运行一下看一看,让这个窗口被别的窗口挡住,再切回这个窗口,我们看到,
窗口的client区域就成了“空心”的,显然,整个client区域没有被重绘。
我觉得很奇怪,于是我写了一个SDK模拟了一下,模仿MFC的做法,
创建一个主窗口(模仿mianframe),一个子窗口(模仿view),子窗口覆盖
在主窗口的client区域,然后把子窗口给closewindow,但并不会出现上述现象。
那么就是说MFC中的mainframe是不重绘自己的客户区的,这一点容易理解,
因为通常客户区被view覆盖,mainframe重绘它是多余的。
MFC是如何做到让mainframe不重绘客户区呢?默认情况下,窗口在产生WM_PAINT
消息的时候一般都是要重绘客户区的呀。
我想知道细节,我看了源代码,但水平有限,没有头绪。
请高手指教!