Модераторы: feodorv, GremlinProg, xvr, Fixin
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> вопрос про PAINTSTRUCT::fErase 
:(
    Опции темы
yngwie19
Дата 4.1.2009, 21:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 829
Регистрация: 15.6.2008
Где: Новгород

Репутация: нет
Всего: нет



Всем привет. При получении контекста дисплея мы передаем переменную PAINTSTRUCT:
Код

PAINTSTRUCT ps;
BeginPaint(hwnd,&ps);

в этой структуре есть параметр fErase (Флаг перерисовки фона окна). В книгах пишут, что данный параметр заполняется данными для задания фона окна, в случае если при регистрации класса параметр hBrbackground задан 0. Но у мненя почему-то окно все-равно остается прозрачным даже в случае если  hBrbackground задан 0. Объясните что делает этот параметр. СПАСИБО.
PM MAIL   Вверх
GremlinProg
Дата 4.1.2009, 22:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2706
Регистрация: 9.8.2005
Где: Тюмень

Репутация: 99
Всего: 106



Цитата(yngwie19 @  4.1.2009,  23:20 Найти цитируемый пост)
В книгах пишут, что данный параметр заполняется данными для задания фона окна, в случае если при регистрации класса параметр hBrbackground задан 0

если честно, не встречал такого определения в книжках,
но зато в MSDN пишут, что fErase - это флаг, извещающий нас о том, нужно-ли закрашивать фон если он еще не был закрашен:
Цитата(PAINTSTRUCT)

fErase
Specifies whether the background must be erased. This value is nonzero if the application should erase the background. The application is responsible for erasing the background if a window class is created without a background brush. For more information, see the description of the hbrBackground member of the WNDCLASS structure. 

Цитата(WNDCLASS)

hbrBackground
...
When this member is NULL, an application must paint its own background whenever it is requested to paint in its client area. To determine whether the background must be painted, an application can either process the WM_ERASEBKGND message or test the fErase member of the PAINTSTRUCT structure filled by the BeginPaint function. 
...

т.е. fErase нам нужен только когда hbrBackground при регистрации класса окна выставлен в ноль.
в этом случае, если fErase не ноль, нужно закрасить задний фон вручную чтобы окно не просвечивало:
Код

::BeginPaint(hwnd,&paint_struct);
if(paint_struct.fErase){
  ::FillRect(paint_struct.hdc,&paint_struct.rcPaint,myBrushHandle);
}
...
::EndPaint(hwnd,&paint_struct);



--------------------
"Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины."
PM WWW ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Системное программирование и WinAPI"
Fixin
GremlinProg
xvr
feodorv
  • Большое количество информации и примеров с использованием функций WinAPI можно найти в MSDN
  • Описание сообщений, уведомлений и примеров с использованием компонент WinAPI (BUTTON, EDIT, STATIC, и т.п.), можно найти в MSDN Control Library
  • Непосредственно, перед созданием новой темы, проверьте заголовок и удостоверьтесь, что он отражает суть обсуждения.
  • После заполнения поля "Название темы", обратите внимание на наличие и содержание панели "А здесь смотрели?", возможно Ваш вопрос уже был решен.
  • Приводите часть кода, в которой предположительно находится проблема или ошибка.
  • Если указываете код, пользуйтесь тегами [code][/code], или их кнопочными аналогами.
  • Если вопрос решен, воспользуйтесь соответствующей ссылкой, расположенной напротив названия темы.
  • Один топик - один вопрос!
  • Перед тем как создать тему - прочтите это .

На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы .


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Системное программирование и WinAPI | Следующая тема »


 




[ Время генерации скрипта: 0.0540 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.