Мне нужно что-то нарисовать в окне (это не мое - оно определяется пользователем, если это имеет значение).
Мне уже удалось нарисовать в окне, получив контекст устройства с помощью GetDC и рисуя нормально, проблема в том, что я не знаю, когда рисовать в окне - окно постоянно перерисовывается (например, игра).
У меня есть несколько идей, но пока они ни хороши, ни плохи / нет реализации.
- Использование таймера. Это была худшая идея, но я сейчас попробую что-нибудь. очевидно, поскольку окно постоянно перерисовывается, оно будет мерцать. Я думал о том, чтобы заставить окно перерисовывать перед своими рисунками, но все равно это не хорошо. не могу придумать хорошую реализацию с таймером ...
- Перехват сообщения WM_PAINT. с использованием перехвата SetWindowsHookEx WM_GETMESSAGE Я могу использовать событие, которое получает сообщение WM_PAINT всякий раз, когда другое окно получает его, но WM_PAINT отправляется до того, как будет завершено рисование. Я обнаружил в MSDN, что вместо WH_GETMESSAGE Windows Hook вы можете использовать WndProcRetHook, который называется после обработки сообщений Windows и получения структуры, содержащей информацию о сообщениях, но пока не повезло - я не могу заставить ее работать ...
- Перехват функций рисования. Я пытался перехватить функции рисования (или функции), такие как ReleaseDC и / или EndPaint, которые делают окно недействительным, поэтому я могу делать свои последние рисунки. на этот раз я сделал так, чтобы он работал довольно хорошо - но он все еще немного мерцает, и на некоторых окнах перехват ReleaseDC каким-то образом препятствует отображению окна - он даже не стирает его фон. иногда даже весь процесс падает.
Так что я ищу хороший способ, чтобы быть последним, чтобы рисовать в окне перед его отображением на экране. Я предпочитаю избегать перехватов, не выполняемых с помощью SetWindowsHookEx (таких как: внешняя DLL), но это тоже подойдет.
Спасибо.