![]() |
Модераторы: Daevaorn |
![]() ![]() ![]() |
|
Royan |
|
||||||||||
Dreamer ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1708 Регистрация: 14.9.2002 Где: Лондон Репутация: нет Всего: 15 |
Ну просто капец какой-то
![]() Собственно код Вот так я вывожу текст
Внутри this->DrawScene(); все выводится в буфер - this->hDCBuffer; Первой строчкой в DrawScene() стоит макрос очистки буфера (на самом деле там он всего лишь закрашивается ровным серым цветом):
Код макроса таков:
Внутри обработчика WM_PAINT я макросом вывожу содержимое из this->hDCBuffer; в this->hDCDisply; последнее соответственно связано с контекста монитором Вот макрос который это все деалет:
А вот код внутри обработчика WM_PAINT:
До сих пор все OK текст выводится и перерисовывается когда надо... Но вот пришло сообщение WM_SIZE и внутри его обрботчика: я вызываю this->DrawScene(); и все! Окошко порывается серым цветом... хотя внутри DrawScene() куча TextOut'ов. Если закоментировать DrawScene() в WM_SIZE, все опять работает как надо. Поробовал использовать WM_ERASEBKGND, но там вобще раз на раз не приходится (каждый раз какие-то куски) Буду признателен за какой-нибудь совет ... ![]() -------------------- Открыта вакансия Junior Java Developer'а в нашем лондонском офисе, подробнее можно узнать здесь |
||||||||||
|
|||||||||||
Royan |
|
|||
Dreamer ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1708 Регистрация: 14.9.2002 Где: Лондон Репутация: нет Всего: 15 |
Вобщем оказалось, что вариантов тьма и все они так или иначе рефрешат картинку, самое главное - это послать WM_NCPAINT тогда все и перерисуется вот возможные решения:
1) ::InvalidateRect(this->hWnd, NULL, TRUE); 2) ::RedrawWindow(this->hWnd, NULL, NULL, RDW_ERASE | RDW_INVALIDATE); Хотя насколько я понял оба они абсолютно одинаковы Непонятно почемуне работает связка: HRGN hRgn = NULL; ::GetWindowRgn(this->hWnd, hRgn); SendMessage(this->hWnd, WM_ERASEBKGND, (WPARAM)this->hDCDisplay, (LPARAM)NULL); SendMessage(this->hWnd, WM_NCPAINT, (WPARAM)hRgn, (LPARAM)NULL); Быть может нужно еще WM_PAINT сгенерировать... Очень бы хотелось услышать коментарии от знатоков ![]() -------------------- Открыта вакансия Junior Java Developer'а в нашем лондонском офисе, подробнее можно узнать здесь |
|||
|
||||
AndyY |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 316 Регистрация: 8.5.2004 Где: СПб Репутация: 2 Всего: 4 |
Royan
как-то странно все ты делаешь ![]() вот например, зачем ты посылаешь WM_NCPAINT? Хочешь чтобы окно отрисовало неклиенскую область (т.е. рамку?) больше ничего толкового рисоваться не будет. После того, как ты сделал InvalidateRect, попросить систему послать тебе немедленно WM_PAINT - очень просто. Для этого есть UpdateWindow. еще - на мой взгляд очень плохая практика кешировать HDC. Наверное это у меня с windows 3.0, где HDC было всего 6 штук ![]() И еще - пожалуйста, если постишь в форум текст - убирай this->. Может кому-то и пофигу, а мне читать такой текст значительно сложнее. |
|||
|
||||
Royan |
|
||||||
Dreamer ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1708 Регистрация: 14.9.2002 Где: Лондон Репутация: нет Всего: 15 |
Я когда читал его описание почему-то псчитал что фрейм - это все что внутри окна, теперь буду знать ![]()
Я таких времен не помню, был ешо мал, но вот буквально сегодня столкнулся с тем, что не могу создать второй CompatibleDC из hDC монитора, функция CreateCompatibleDC возвращала 0, а GetLastError() что-то вроде can't create file. The file already exists.
Okey, буду стараться вырезать только,тогда не оличищь локальных переменных от членов класса имхо это и есть плохо -------------------- Открыта вакансия Junior Java Developer'а в нашем лондонском офисе, подробнее можно узнать здесь |
||||||
|
|||||||
![]() ![]() ![]() |
Правила форума "С++:Общие вопросы" | |
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |