我跟了一下程序,执行到CWnd::RunModalLoop()里面,有这么两步:
// phase1: check to see if we can do idle work
while (bIdle &&
!::PeekMessage(pMsg, NULL, NULL, NULL, PM_NOREMOVE))
{
// ... // show the dialog when the message queue goes idle
if (bShowIdle)
{
// 正常情况下,会执行到这儿
ShowWindow(SW_SHOWNORMAL);
UpdateWindow();
bShowIdle = FALSE;
} // ...}// phase2: pump messages while available
do
{
// ... // 按下Alt键以后,会进到下面
// show the window when certain special messages rec'd
if (bShowIdle &&
(pMsg->message == 0x118 || pMsg->message == WM_SYSKEYDOWN))
{
ShowWindow(SW_SHOWNORMAL);
UpdateWindow();
bShowIdle = FALSE;
} // ...}while (::PeekMessage(pMsg, NULL, NULL, NULL, PM_NOREMOVE));在正常的情况下,会执行到第一步里面的ShowWindow()等。这时对话框能够显示。在某种我不知道的情况下,连第一步while ()循环都不进去。对话框也不显示,只有按下Alt键以后,才会在第二步里面调用ShowWindow(SW_SHOWNORMAL);这时对话框才显示出来。
我在跟程序的时候,了解到bIdle=true;
那么到底是什么原因会造成第一步的::PeekMessage(pMsg, NULL, NULL, NULL, PM_NOREMOVE)获取了消息呢?
// phase1: check to see if we can do idle work
while (bIdle &&
!::PeekMessage(pMsg, NULL, NULL, NULL, PM_NOREMOVE))
{
// ... // show the dialog when the message queue goes idle
if (bShowIdle)
{
// 正常情况下,会执行到这儿
ShowWindow(SW_SHOWNORMAL);
UpdateWindow();
bShowIdle = FALSE;
} // ...}// phase2: pump messages while available
do
{
// ... // 按下Alt键以后,会进到下面
// show the window when certain special messages rec'd
if (bShowIdle &&
(pMsg->message == 0x118 || pMsg->message == WM_SYSKEYDOWN))
{
ShowWindow(SW_SHOWNORMAL);
UpdateWindow();
bShowIdle = FALSE;
} // ...}while (::PeekMessage(pMsg, NULL, NULL, NULL, PM_NOREMOVE));在正常的情况下,会执行到第一步里面的ShowWindow()等。这时对话框能够显示。在某种我不知道的情况下,连第一步while ()循环都不进去。对话框也不显示,只有按下Alt键以后,才会在第二步里面调用ShowWindow(SW_SHOWNORMAL);这时对话框才显示出来。
我在跟程序的时候,了解到bIdle=true;
那么到底是什么原因会造成第一步的::PeekMessage(pMsg, NULL, NULL, NULL, PM_NOREMOVE)获取了消息呢?
ShowWindow(SW_SHOWNORMAL);
//换个顺序试
1 父窗口HWND无效
2 在ONINITDIALOG里用了ENDDIALOG
3 无效的对话框资源ID
4 使用没有注册的的自定义控件
5 对话框的某些控件创建失败,如RICHEDIT,要加上AfxInitRichEdit();
1、我跟程序看过CWnd::hWndParent,没有问题。
2、OnInitDialog()里只有CDialog::OnInitDialog();与return TRUE;
3、有正常显示的情况,所以对话框资源ID是没有问题的
45、只使用了普通的EDIT控件,没有使用RICHEDIT更没有使用别的第三方控件
我使用的MFC架构,MFC也不太熟悉,很难想象会有什么隐藏的语句!
拜托各位,哪怕是提供一点线索和思考。如果分不够,我在另外开贴
FindClose(hFind);
我估计是szTemp的格式不对。