首先我是一个MFC入门选手,在学到createwindow 和 showwindow 以及 updatewindow时候,出现如下状况:
(回调函数部分代码:)
case WM_PAINT:
PAINTSTRUCT ps;
HDC hdc;
hdc = BeginPaint(hwnd,&ps);
TextOut(hdc,0,0,"text",strlen("text"));
EndPaint(hwnd,&ps);
break;
default:
return DefWindowProc(hwnd,msg,wParam,lParam);
(主程序部分代码:)
HWND hwnd = CreateWindow("zdc","text",WS_OVERLAPPEDWINDOW,0,0,400,300,NULL,NULL,hInstance,NULL);
ShowWindow(hwnd,SW_SHOWNORMAL);
UpdateWindow(hwnd);问题如下:注释掉updatewindow后也能显示text;
我的分析:在调用creatwindow时,返回WM_CREAT,而DefWindowProc对这个WM_CREAT的默认处理中不仅创建窗口而且还会调用会产生WM_PAINT的函数(也就是在处理WM_CREAT的对应程序块中包含类似updatewindow这样会发出wm_paint的函数),这就解释为什么注释掉updatewindow后也能显示text,但是如果这个分析是正确的话为什么还要多此一举在show下面update,并且我分析认为在这个updatewindow函数体中,应是先调用回调函数并传去WM_PAINT,再接着调用showwindow?不知哪位大神帮我解一下惑,并指出我分析的错误之处!
(回调函数部分代码:)
case WM_PAINT:
PAINTSTRUCT ps;
HDC hdc;
hdc = BeginPaint(hwnd,&ps);
TextOut(hdc,0,0,"text",strlen("text"));
EndPaint(hwnd,&ps);
break;
default:
return DefWindowProc(hwnd,msg,wParam,lParam);
(主程序部分代码:)
HWND hwnd = CreateWindow("zdc","text",WS_OVERLAPPEDWINDOW,0,0,400,300,NULL,NULL,hInstance,NULL);
ShowWindow(hwnd,SW_SHOWNORMAL);
UpdateWindow(hwnd);问题如下:注释掉updatewindow后也能显示text;
我的分析:在调用creatwindow时,返回WM_CREAT,而DefWindowProc对这个WM_CREAT的默认处理中不仅创建窗口而且还会调用会产生WM_PAINT的函数(也就是在处理WM_CREAT的对应程序块中包含类似updatewindow这样会发出wm_paint的函数),这就解释为什么注释掉updatewindow后也能显示text,但是如果这个分析是正确的话为什么还要多此一举在show下面update,并且我分析认为在这个updatewindow函数体中,应是先调用回调函数并传去WM_PAINT,再接着调用showwindow?不知哪位大神帮我解一下惑,并指出我分析的错误之处!
UpdateWindow(hWnd);
Sleep(5000);
MSG nMsg;
while(GetMessage(&nMsg,hWnd,0,0)){
TranslateMessage(&nMsg);
DispatchMessage(&nMsg);
}
注释掉UpdateWindow和不注释就有区别了
如果你的程序运算量大,这时候没及时处理WM_PAINT,就会造成界面不刷新的状况,这时候需要updatewindow一下.