Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Рисование на Desktop DC

7.6K
21 сентября 2004 года
johncapfull
21 / / 14.09.2004
Есть следующая проблемма: нужно нарисовать что-то (текст, например) на экране. Картинка эта должна пропускать все сообщения мыши "под себя", т.е. чтобы их обрабатывало окно, которое за картинкой. Первая мысль решения - сделать себе
invoke GetDC, 0
и далее рисовать на этом контексте. Но встал вопрос: а откуда, с-но, делать рисование? Пробовал (глупо, но все-же) из WinProc по WM_PAINT самого приложения - есс-но, ни выходит толкового ничего (след остается при переносе окон, мигает надпись etc). Ладно, забыли.
Решил пойти другим путем - разместить картинку на окне, а окно по InvalidateRgn покоцать по маске картинки. Сделал. И дальше решил наивно в WinProc-е обрабатывать WM_NCHITTEST на HTNOWHERE... С формой этот фокус не прошел 8((
Че делать? Имхо, правельнее будет рисовать все-таки на контексте десктопа, но ОТКУДА?...
4.3K
21 сентября 2004 года
VasAlVit
33 / / 03.09.2004
Попробуй рисовать из цикла обработки сообщений в функции WinMain. Нижеперечисленный пример работает следующим образом:
Проверяется наличие сообщения. Если сообщение есть - оно обрабатывается, если нет - рисуется твоя картинка.

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.
7.6K
21 сентября 2004 года
johncapfull
21 / / 14.09.2004
Цитата:
Originally posted by VasAlVit
Попробуй рисовать из цикла обработки сообщений в функции WinMain.
...skipped...


Спасибо, посмотрю. Насчет хука - уже думал, но чего-то мне этот вариант показался не очень логичным. Хотя... 8)

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог