对于一个像HelloWorld的例子程序,我加了个下面两个消息,消息不是要一个一个的处理吗,当处理完一个消息后才从消息队列里面取一个消息,
如果wm_lbuttondown没有处理完,那么wm_settext又是怎么被get到的 ?我一开始觉得Edit窗口有自己的消息处理函数,如果是这样的话,不加UpdateWindow(hwndEdit);要等到3秒后才显示
case WM_CREATE:
hwndEdit=CreateWindow(TEXT("Edit"),NULL,WS_CHILD|WS_VISIBLE|WS_BORDER,0,0,100,25,hWnd,(HMENU)1,hInst,NULL);
return 0;
case WM_LBUTTONDOWN:
SendMessage(hwndEdit,WM_SETTEXT,NULL,(LPARAM)count1);//如果wm_lbuttondown没有处理完,那么wm_settext又是怎么被get到的 ?
//PostMessage(hwndEdit,WM_SETTEXT,NULL,(LPARAM)count1);
UpdateWindow(hwndEdit);
Sleep(500);
SendMessage(hwndEdit,WM_SETTEXT,NULL,(LPARAM)count2);
//PostMessage(hwndEdit,WM_SETTEXT,NULL,(LPARAM)count2); //使用post也达不到想要的效果
UpdateWindow(hwndEdit);
Sleep(500);
SendMessage(hwndEdit,WM_SETTEXT,NULL,(LPARAM)count3);
// UpdateWindow(hwndEdit);
SendMessage(hwndEdit,WM_SETTEXT,NULL,(LPARAM)count4);

Sleep(2000);
return 0;

解决方案 »

  1.   

    这句话是对的:Edit窗口有自己的消息处理函数3秒后才显示:你不更新,他怎么显示啊...
      

  2.   

    1、SendMessage发送的消息不会再消息队列中排队,它是立即执行的,执行完成后返回。
    2、在UI线程中不要使用Sleep,这是编程的大忌。
    3、UI显示,需要让UI得到重新绘制的消息,使用 UpdateWindow能够达到这个目的。
      

  3.   

    可是我看MSDN说WM_SETTEXT消息是SET加DISPLAY的,我以前用MFC就直接用UpdateData(FALSE)就可以设置和显示啊!是不是WM_SETTEXT消息里面又发送了WM_PAINT消息啊,UpdateData(FALSE)在一个函数结束后会缺省的调用UpdateWindow(),在线等待!
      

  4.   

    Sleep函数阻塞了UI线程运行,Sleep(500); 
    Sleep(500); 
    Sleep(2000); 
    正好3秒