Re: WinAPI послать окну WM_PAINT

azaitsev31

Разбирался в WinAPI, возникла такая проблема:
Нужно, чтобы по щелчку мыши окну посылалось сообщение WM_PAINT. На MSDN сказано что это можно сделать функциями RedrawWindow и UpdateWindow, обе попробовал использовать - не работает. Даже особую жесть пробовал, не вышло.

LRESULT CALLBACK WndProc( HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam )
{
case WM_PAINT:
{
.....
}
case WM_LBUTTONDOWN:
{
.......
RedrawWindow(hwnd,&wRc,NULL,RDW_UPDATENOW ); //1й способ

UpdateWindow(hwnd); //2й способ

MSG jest; //жесть!
jest.hwnd=hwnd;
jest.message=WM_PAINT;
DispatchMessage(&jest);
break;
}

Почему эти действия не отсылают WM_PAINT окну?
Или может я в принципе где-то не понимаю механику сообщений?

kokoc88

Почему эти действия не отсылают WM_PAINT окну?
InvalidateRect
RDW_INVALIDATE

azaitsev31

Спасибо, это действует.
Но почему тогда 1й и 2й способы описанные мною не приводят к исполнению кода в case WM_PAINT:{...............} ?

kokoc88

Но почему тогда 1й и 2й способы описанные мною не приводят к исполнению кода в case WM_PAINT
Почитай MSDN, там это написано. Узнаешь, как работает GDI. Тебя интересует описание WM_PAINT и всех функций, которые названы в этой теме.

Serab

фишка не столько в GDI, сколько в том, что WM_PAINT обрабатывается очередью сообщений несколько особо.

Serab

хотя, я тут подумал, может я под пивком и это все «обман знания», завтра перечитаю Рихтера и напишу подробнее :(

kokoc88

фишка не столько в GDI, сколько в том, что WM_PAINT обрабатывается очередью сообщений несколько особо
Документация про это находится в разделе GDI, вот я и пишу про GDI.
На вопрос автора отвечает эта ссылка.

azaitsev31

разобрался, всем спасибо )
Оставить комментарий
Имя или ник:
Комментарий: