创建新窗口时ShowWindow和UpdateWindow的一些疑问。解决方案

创建新窗口时ShowWindow和UpdateWindow的一些疑问。。
查了一些资料,说showwindows是显示窗口,UpdateWindow函数是更新窗口,一般的窗口创建过程大家都知道,如下:
1.设计窗口类
2.注册窗口类
3.ShowWindow()
4.UpdateWindow()
5.消息循环

窗口过程函数里的WM_paint消息就简单地输出一个"test"字符串如下:
C/C++ code
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后,进行消息循环里的
C/C++ code
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()取出再响应的,这点让我很不解,求指教

问题比较繁琐且啰嗦,菜鸟一个,求指点。。。

------解决方案--------------------
(1)在ShowWindow()后,为何还要多用一个UpdateWindow(),我在实质测试时把UpdateWindow()删除时运行结果还是一致的。
(2)据查资料,UpdateWindow()函数实质是产生一个WM_PAINT消息,所以在运行程序后,弹出的窗口中就输出了test字符,这个可以理解,但为何把UpdateWindow()函数注释掉,只保留ShowWindow(),程序运行时还是会出现test字符?如果认为是窗口从无到有时产生重绘消息产生的文本,那是否表示在不注释掉UpdateWindow()时已经响应了两次WM_PAINT消息呢?
====================
WM_PAINT消息是否产生关键是看是不是有无效区出现。关于ShowWindow与UpdateWindow的作用,ShowWindow的作用是显示/隐藏窗口,UpdateWindow刷新窗口,显示/隐藏窗口只能用ShowWindow,当然显示时也会刷新。所以刷新窗口 这两个都可以用。

如果认为是窗口从无到有时产生重绘消息产生的文本,那是否表示在不注释掉UpdateWindow()时已经响应了两次WM_PAINT消息呢?
=============
任何情况下消息队列中都不可能出现两个WM_PAINT消息的,当有两个WM_PAINT消息,系统会将两个无效区合并成一个,形成一个WM_PAINT消息。

(3)关于程序运行顺序的问题,按照正常的运行步骤应该是:ShowWindow和UpdateWindow后,进行消息循环里的
C/C++ codewhile (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()取出再响应的,这点让我很不解,求指教
=======================
这个问题就涉及到UpdateWindow了,本来WM_PAINT消息的优先级是很低的,窗口不一定会及时处理这个消息,而UpdateWindow会让窗口及时处理WM_PAINT消息。