|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
04.04.2012, 10:24 | #1 |
Пользователь
Регистрация: 26.03.2012
Сообщений: 10
|
рисование мышью с использованием BitBlt
Доброго времени суток!
Пытаюсь изучить работу с функцией BitBlt при рисовании мышью, столкнулся с проблемой, что вместо линии стало выводить квадраты, подскажите пожалуйста в чем ошибка Код:
|
04.04.2012, 16:39 | #2 |
Форумчанин
Регистрация: 11.07.2010
Сообщений: 914
|
Вы создаете hDrawingBitmap, он выполняет роль буфера.
Рисуете по нему в WM_MOUSEMOVE, а потом выводите при WM_PAINT. Но много ошибок, и первая, hDrawingBitmap при создании имеет черный фон, и вы рисуете по нему черные линии, а потом BitBlt в контекст окна. Какой же будет эффект? Тогда уж залейте его фоном в начале: Код:
|
04.04.2012, 22:08 | #3 |
Пользователь
Регистрация: 26.03.2012
Сообщений: 10
|
Спасибо за ответ, сделал заливку как вы сказали, все стало гораздо лучше, хотя странности при рисовке остались, как я понимаю это связанно с case WM_PAINT
|
04.04.2012, 22:43 | #4 |
Форумчанин
Регистрация: 11.07.2010
Сообщений: 914
|
Эти странности связаны с непонятно заданной логикой рисования. И шквалом порождаемых объектов GDI и с их неосвобождением.
Откройте диспетчер задач, добавьте столбец "объекты GDI". Ужаснетесь. ) |
06.04.2012, 10:28 | #5 |
Пользователь
Регистрация: 26.03.2012
Сообщений: 10
|
Все получилось вроде ) подправил WM_PAINT,хотя мне лично причина ошибки не очень ясна
Код:
BitBlt(hdc,0,0,rcClient.right ,rcClient.bottom,hTmpDC, 0,0, SRCCOPY); не очень ясно по чему я не мог использовать x = LOWORD(lParam); y = HIWORD(lParam); |
06.04.2012, 13:33 | #6 |
Форумчанин
Регистрация: 11.07.2010
Сообщений: 914
|
Дело хозяйское, но Вы выводите всю клиентскую область, когда надо и когда не надо.
Структуру PAINTSTRUCT раскройте, в ней будет RECT который действительно нуждается в перерисовке, его координаты и надо задействовать, а не брать полные габариты клиента. |
06.04.2012, 15:06 | #7 |
Пользователь
Регистрация: 26.03.2012
Сообщений: 10
|
Вы не можете подсказать книгу, в которой хорошо описана работа с этой функцией ?
|
06.04.2012, 15:35 | #8 |
Форумчанин
Регистрация: 11.07.2010
Сообщений: 914
|
Кроме банального ответа - MSDN - ничего в голову не приходит.
Если задача: не сдать и забыть, а понять, то только собственный опыт. |
06.04.2012, 15:46 | #9 |
Пользователь
Регистрация: 26.03.2012
Сообщений: 10
|
тут именно понять, по этому и взялся за простой пример, который как оказался таит в себе множество подводных камней, переход с Билдера на win api сложная штука как оказалось )
Сравнил по загруженности диспетчера задач оба варианта Код:
Последний раз редактировалось Iosimo; 06.04.2012 в 16:14. |
06.04.2012, 16:57 | #10 |
Форумчанин
Регистрация: 11.07.2010
Сообщений: 914
|
Значица так.
Код:
Это конечно еще довести до ума, но принцип должен быть понятен Последний раз редактировалось EUGY; 06.04.2012 в 17:00. |
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
BitBlt прозрачное рисование | Alex Cones | Общие вопросы Delphi | 2 | 29.06.2010 19:38 |
BitBlt, вывод изображения | zotox | Win Api | 5 | 22.04.2010 21:43 |
BitBlt из памяти на экран | Марин | Win Api | 6 | 25.01.2010 00:50 |
BitBlt | ZotaC | Gamedev - cоздание игр: Unity, OpenGL, DirectX | 14 | 16.01.2010 19:04 |
BitBlt на контекст DC и его альтернатива | notHaker | Мультимедиа в Delphi | 7 | 03.12.2009 01:04 |