WM_PAINT перестает работать после сворачивания и восстановления окна - PullRequest
0 голосов
/ 25 февраля 2012

Я создал программу с пользовательской не клиентской областью.Вместо обработки 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 голосов
/ 26 февраля 2012

Оказывается, проблема была в обработке сообщения WM_NCCALCSIZE для удаления не клиентской области. Вот альтернатива, которую я использовал:

        DWORD dwStyle = GetWindowLong(hwnd, GWL_STYLE);
        dwStyle &= ~WS_OVERLAPPEDWINDOW;
        SetWindowLong(hwnd, GWL_STYLE, dwStyle);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...