蒋老师:
您好!
我注册了一个窗口类,并创建了该窗口类的窗口(当作控件使用),这个控件主要是完成当鼠标按下,移动,鼠标松开,鼠标移出该窗口时该窗口背景图片的切换,
我用SetWindowlong GWL_USERDATA的方法给窗口标注状态,当鼠标按下,移动,松开,移出窗体时,我就改变窗口的状态,并立即刷新。
我对该窗口的WM_PAINT做了如下处理,即根据GetWindowLong GWL_USERDATA获得的窗口状态贴上不同的图。您认为我这样设计是否合理?
我立即刷新使用的是charles petzold在windows程序设计一书上提到的:
::InvalidateWindow(hwnd,NULL,TRUE);
::UpdateWindow(hwnd);
但我发现并不象书中所说的那样,根本没有发生刷新,我在调用UpdateWindow时跟踪了一下,没有进行WM_PAINT消息的处理!希望您帮我解除疑惑,并告诉我如何完成窗口的立即刷新,非常感谢!

解决方案 »

  1.   

    可以这样设计。
    UpdateWindow就是让窗口立即响应WM_PAINT消息,你可以调试程序,在执行UpdateWindow前在窗口函数入口设置一个断点来跟踪。不过好象没有InvalidateWindow函数,应该是InvalidateRect。另外检查一下hwnd的值对不对。
      

  2.   

    直接发送WM_PAINT也不行的,这种消息要等到函数返回去能响应。
      

  3.   

    InvalidateRect 指定区域,如果指定为空,会被系统过滤掉。再UDW
    还有,不能在WM_PAINT时发送该消息调用。否则无效。
      

  4.   

    WM_MOUSEMOVE
    WM_LBUTTONDOWN
    WM_LBUTTONUP
    WM_MOUSELEAVE你直接在窗体接收到这几个消息时画图不行吗?