查了一些资料,说showwindows是显示窗口,UpdateWindow函数是更新窗口,一般的窗口创建过程大家都知道,如下:
1.设计窗口类
2.注册窗口类
3.ShowWindow()
4.UpdateWindow()
5.消息循环
窗口过程函数里的WM_paint消息就简单地输出一个"test"字符串如下:
case WM_PAINT:
hdc = BeginPaint(hWnd, &ps);
TextOut(hdc,0,0,L"test",wcslen(L"test"));
EndPaint(hWnd, &ps);
break;
我想问的是:
(1)在ShowWindow()后,为何还要多用一个UpdateWindow(),我在实质测试时把UpdateWindow()删除时运行结果还是一致的。
(2)据查资料,UpdateWindow()函数实质是产生一个WM_PAINT消息,所以在运行程序后,弹出的窗口中就输出了test字符,这个可以理解,但为何把UpdateWindow()函数注释掉,只保留ShowWindow(),程序运行时还是会出现test字符?如果认为是窗口从无到有时产生重绘消息产生的文本,那是否表示在不注释掉UpdateWindow()时已经响应了两次WM_PAINT消息呢?
(3)关于程序运行顺序的问题,按照正常的运行步骤应该是:ShowWindow和UpdateWindow后,进行消息循环里的
while (GetMessage(&msg, NULL, 0, 0))
从而将消息取出进行响应,但实质调试时,在UpdateWindow()、while (GetMessage(&msg, NULL, 0, 0))和case WM_PAINT三处分别设置断点,在调试时,发现实质的运行顺序是UpdateWindow()后直接到case WM_PAINT,进行了消息响应,再到消息循环的while (GetMessage(&msg, NULL, 0, 0)),也就是说UpdateWindow产生WM_PAINT消息后直接就响应了消息,而不是通过这GetMessage()取出再响应的,这点让我很不解,求指教
问题比较繁琐且啰嗦,菜鸟一个,求指点。。。