Рисование на Desktop DC
invoke GetDC, 0
и далее рисовать на этом контексте. Но встал вопрос: а откуда, с-но, делать рисование? Пробовал (глупо, но все-же) из WinProc по WM_PAINT самого приложения - есс-но, ни выходит толкового ничего (след остается при переносе окон, мигает надпись etc). Ладно, забыли.
Решил пойти другим путем - разместить картинку на окне, а окно по InvalidateRgn покоцать по маске картинки. Сделал. И дальше решил наивно в WinProc-е обрабатывать WM_NCHITTEST на HTNOWHERE... С формой этот фокус не прошел 8((
Че делать? Имхо, правельнее будет рисовать все-таки на контексте десктопа, но ОТКУДА?...
Проверяется наличие сообщения. Если сообщение есть - оно обрабатывается, если нет - рисуется твоя картинка.
C/C++:
MSG msg;
while ( true )
{
if ( PeekMessage( &msg, NULL, NULL, NULL, PM_NOREMOVE ) )
{
if ( GetMessage( &msg, NULL, NULL, NULL ) )
DispatchMessage( &msg );
else
break;
}
else
DrawMyImage(); // твоя процедура рисования
}
Assembler:
.DATA
msg MSG ?
.CODE
@@Loop:
INVOKE PeekMessage, OFFSET msg, 0, 0, 0, PM_NOREMOVE
TEST EAX, EAX
JZ SHORT Draw
INVOKE GetMessage, OFFSET msg, 0, 0, 0
TEST EAX, EAX
JZ SHORT @@Exit
INVOKE DispatchMessage, OFFSET msg
JMP SHORT @@Loop
@@Draw:
INVOKE Draw ; вызов процедуры рисования
JMP SHORT @@Loop
@@Exit:
Ещё один вариант - перехват мыши при помощи функции SetWindowsHookEx.
Цитата:
Originally posted by VasAlVit
Попробуй рисовать из цикла обработки сообщений в функции WinMain.
...skipped...
Попробуй рисовать из цикла обработки сообщений в функции WinMain.
...skipped...
Спасибо, посмотрю. Насчет хука - уже думал, но чего-то мне этот вариант показался не очень логичным. Хотя... 8)