最小化和恢复窗口后WM_PAINT停止工作

时间:2012-02-25 14:14:23

标签: c++ winapi

我用自定义非客户区制作了一个程序。我没有处理WM_NCPAINT,而是在WM_NCCALCSIZE中将客户区大小设置为零,然后通过处理WM_NCHITTEST来模拟非客户区。窗口的所有绘画都在WM_PAINT中处理。 WM_PAINT在我启动程序时以及程序需要重新绘制时工作正常。但是,一旦我通过调用ShowWindow(hwnd,SW_MINIMIZE)来最小化程序,然后通过在任务栏中单击它来恢复程序,WM_PAINT将不再起作用。我检查了WM_PAINT中的每个函数调用,它们都返回成功,但窗口只显示为黑色。有人为什么有任何想法?

这是我的WM_PAINT处理程序的代码:

http://pastebin.com/MXmWzb4M

这是控制台窗口的输出:

  

BeginPaint成功

     

hdcBuffer有效

     

MainWindow-> hbmBuffer有效

     

hdcMem有效

因此,看到我的WM_PAINT处理程序中的每个函数调用都返回成功,为什么我的整个窗口显示为黑色?

1 个答案:

答案 0 :(得分:0)

原来问题在于处理WM_NCCALCSIZE消息以删除非客户区域。这是我使用的替代方案:

        DWORD dwStyle = GetWindowLong(hwnd, GWL_STYLE);
        dwStyle &= ~WS_OVERLAPPEDWINDOW;
        SetWindowLong(hwnd, GWL_STYLE, dwStyle);