2016-01-15 3 views
0

У меня есть сообщение о секретности WM_PAINT, отправляемое в окно без причины, которое я могу понять. Я посылаю одно сообщение WM_PAINT из некоторого кода шахтной using-Диагностировать тайну Сообщение WM_PAINT

InvalidateRgn(graphwin_hwnd,NULL,1); 
SendMessage(graphwin_hwnd,WM_PAINT,0,0); 

, но после выполнения последующего кода, который рисует некоторые графики на экране, отладчик показывает, что второе WM_PAINT сообщение приходит откуда-то. Мой вопрос в том, как я могу диагностировать то, что вызывает отправку этого второго сообщения WM_PAINT.

Edit: i486 правильно указал, что мне не нужно явно сделать SendMessage() ... но, к моему удивлению, даже когда я заметил это, я все еще получаю 1 лишнюю тайну WM_PAINT сообщение быть отправленный обработчику для моего графического окна, так что это еще не совсем проблема.

Edit: К сожалению, я ошибся, после того, как закомментировать SendMessage, кажется, я до сих пор несвязанного ошибка завинчивания вещи - но я только один WM_PAINT сообщение ... так проблема решена.

+1

Почему вы решили отправить 'WM_PAINT' себя? Это всегда неправильно. –

+1

* Я все еще получаю 1 избыточное тайное сообщение WM_PAINT, отправленное обработчику для моего графического окна, так что это еще не совсем проблема. * Вы должны ожидать получения сообщений WM_PAINT. Почему вы их удивляете? Как будет выглядеть ваше окно без них? –

+0

@David, я ожидаю получить одно сообщение WM_PAINT ... но я получаю два. Рисунок занимает некоторое время, потому что это граф рассеяния, содержащий более 100 000 точек, я не хочу делать это дважды без необходимости. – Mick

ответ

1

Вам не нужно отправлять WM_PAINT - он отправляется автоматически после Invalidate. Вызовите UpdateWindow, чтобы заставить его. Вероятно, второй WM_PAINT из-за InvalidateRgn. Чтобы проверить это, прокомментируйте свой SendMessage и проверьте наличие WM_PAINT.

+0

Спасибо за это ...но, кажется, у меня больше чем один член! См. Править. – Mick

+0

Я надеюсь, что дополнительный WM_PAINT после первоначальной перерисовки, т. Е. Вы получите один обычный WM_PAINT, когда окно впервые отображается, другое из 'InvalidateRgn' и фантомное сообщение - 3? – i486

Смежные вопросы