各位大侠,有一个问题困扰我好几天了,在这里求助,简要说明如下:
在MFC程序中,窗口的创建和显示到底依靠不依靠消息队列的分派消息呢??具体的说,我在一个单文档工程下在CMainFrame::OnCreate()中设置了断点,然后又在CXXAPP::InitInstance()设置了断点,逐步跟踪,发现程序是首先进入框架的CXXAPP::InitInstance(),然后转到框架的OnCreate(),执行完毕后却回到了消息映射的调用路线上,但不跟踪程序,最终跟踪到一条汇编代码77D1FA08   call        77D194A4,到这里就停止了,并没有回到CXXAPP::InitInstance()
好了,问题出来了,既然是在执行CXXAPP::InitInstance()函数的时调用到的CMainFrame::OnCreate(),也就是说,现在程序仍然未跳出CXXAPP::InitInstance(),也就相应的未调用后来的 AfgGetApp->RUN()进入消息循环,也就应该没有消息处理过程,这不与前面的CMainFrame::OnCreate()矛盾吗? 要知道在窗口创建的时候发送的WM_CREATE消息是标准的窗口消息,却在还没有进入RUN()消息循环的情况下被执行了,请问??是在哪里GetMessage()的呢,有是在哪Translate和Dispatch的呢??没有道理呀???
除非WM_CREATE消息是不进队消息,直接发送到窗口过程执行,但是我查了半天,并没有明确说明WM_CREATE是不进队消息的任何文字说明!还有一点:在CXXAPP::InitInstance()中执行代码:
m_pMainWnd->ShowWindow(SW_SHOW);
        m_pMainWnd->UpdateWindow();
后,窗口会显示出来吗??
书上说,m_pMainWnd->UpdateWindow();会发送一个WM_PAINT消息到达消息队列,导致窗口重绘,既然在这个时候还没有进入RUN()循环,哪也就是说WM_PAINT消息并没有真正被响应,那么窗口在这个时候是不会出现的,这样理解对吗??
SDK程序中问题更容易说明,在还没有进入消息循环的时候调用ShowWindow(hwnd,nCmdShow) ,UpadeWindow(SW_SHOW)调用了以后,窗口就应该被显示出来吗??