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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Двойная Буферизация 
V
    Опции темы
mes
Дата 23.7.2008, 22:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

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



Цитата(Kostik88 @  23.7.2008,  22:33 Найти цитируемый пост)
Спасибо! Теперь буду ломать голову как мигание кнопок убрать    

а кнопки у тебя над графиком располагаются? тогда установи флаг  родителя вырезать_область_детей: 

Цитата

WS_CLIPCHILDREN 
    Excludes the area occupied by child windows when drawing occurs within the parent window. This style is used when creating the parent window.

WS_CLIPSIBLINGS 
    Clips child windows relative to each other; that is, when a particular child window receives a WM_PAINT message, the WS_CLIPSIBLINGS style clips all other overlapping child windows out of the region of the child window to be updated. If WS_CLIPSIBLINGS is not specified and child windows overlap, it is possible, when drawing within the client area of a child window, to draw within the client area of a neighboring child window.


Это сообщение отредактировал(а) mes - 23.7.2008, 22:45


--------------------
PM MAIL WWW   Вверх
Kostik88
Дата 23.7.2008, 22:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 76
Регистрация: 9.5.2008

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



Цитата

а кнопки у тебя над графиком располагаются?


Нет, у меня кнопки непосредственно в области рисования, под графиком распологаются.
PM MAIL   Вверх
mes
Дата 23.7.2008, 23:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

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



Цитата(Kostik88 @  23.7.2008,  22:51 Найти цитируемый пост)
Нет, у меня кнопки непосредственно в области рисования, под графиком распологаются. 

я и имел ввиду, что в области рисования - разницы то нет какое расположение у них по отношению к графику - главное, что перерисовка затрагивает область дочерних окон.. Решение проблемы - использование  флага из предыдущего поста

Это сообщение отредактировал(а) mes - 23.7.2008, 23:04


--------------------
PM MAIL WWW   Вверх
Kostik88
Дата 23.7.2008, 23:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 76
Регистрация: 9.5.2008

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



Ок. Я попробую=)
PM MAIL   Вверх
Kostik88
Дата 24.7.2008, 13:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 76
Регистрация: 9.5.2008

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



mes,  я попробовал изменить стиль класса окон с помощью ф-ции SetClassLong :

для диалога(родителя):

Код

SetClassLong(hDlg,GCL_STYLE,WS_CLIPCHILDREN  );


и для кнопки (ребёнок):

Код

 SetClassLong(hBottom,GCL_STYLE,WS_CLIPSIBLINGS  );


но мигание не исчезло. Может я чтото не так делаю?
PM MAIL   Вверх
GremlinProg
Дата 24.7.2008, 16:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



1. WS_xxx - это стили окна, а не класса окна: не SetClassLong, а SetWindowLong

2. такие глобальные стили, как WS_CLIPCHILDREN обычно не выставляются функцией, а добавляются при инициализации окна

3. стиль - это флаг, или набор флагов, его нужно ставить такой комбинацией: new_style = old_style | style_flag, а не простым присваиванием, т.е. нужно дополнительно получить старые стили (GetWindowLong)

4. если ты уверен, что твое приложение будет запускаться только под OS XP, то все проблемы с морганием решит всего лишь один дополнительный стиль WS_EX_COMPOSITED, дешево и сердито

Это сообщение отредактировал(а) GremlinProg - 24.7.2008, 16:18


--------------------
"Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины."
PM WWW ICQ   Вверх
Kostik88
Дата 24.7.2008, 16:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 76
Регистрация: 9.5.2008

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



Цитата


2. такие глобальные стили, как WS_CLIPCHILDREN обычно не выставляются функцией, а добавляются при инициализации окна

3. стиль - это флаг, или набор флагов, его нужно ставить такой комбинацией: new_style = old_style | style_flag, а не простым присваиванием, т.е. нужно дополнительно получить старые стили (GetWindowLong)




Можно увидеть каконибудь примерчик, если не трудно, я несовсем понял? 0о



Это сообщение отредактировал(а) Kostik88 - 24.7.2008, 17:02
PM MAIL   Вверх
GremlinProg
Дата 24.7.2008, 17:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Цитата(Kostik88 @  24.7.2008,  18:55 Найти цитируемый пост)
Можно увидеть каконибудь примерчик, если не трудно, я несовсем понял? 0о

Код

SetWindowLong(
      hwnd,
      GWL_STYLE,
      GetWindowLong(hwnd,GWL_STYLE) | WS_CLIPCHILDREN
);

Цитата(Kostik88 @  24.7.2008,  18:55 Найти цитируемый пост)

по 2-му пункту вопрос, как мне добавить при иницализации если я создаю диалоговое окно в Resource Viev?

для диалога в редакторе ресурсов есть соответствующая галочка "Clip children", но можно и вручную задать любые флаги, для этого открываем файл *.rc в любом текстовом редакторе и находим ресурс диалога, я покажу пример на стандартном about-box'е:
Цитата

IDD_ABOUTBOX DIALOGEX 22, 17, 230, 76
STYLE DS_SETFONT | DS_MODALFRAME | WS_CAPTION | WS_SYSMENU
EXSTYLE WS_EX_CLIENTEDGE
CAPTION "About"
FONT 8, "System", 0, 0, 0x0
BEGIN
    ICON            IDI_LINECACHE,IDC_MYICON,14,9,20,20
    LTEXT           "LineCache Version 1.0",IDC_STATIC,49,10,119,8,
                    SS_NOPREFIX
    LTEXT           "Copyright © 2008",IDC_STATIC,49,20,119,8
    DEFPUSHBUTTON   "OK",IDOK,195,6,30,11,WS_GROUP
END


здесь мы видим две ключевые строчки: STYLE и EXSTYLE
чтобы дополнительно включить какой-нибудь стиль нужно добавить его в соответствующую строку через операцию or(|), например сейчас я добавлю дополнительный стиль, которого нет в редакторе форм:
Цитата

IDD_ABOUTBOX DIALOGEX 22, 17, 230, 76
STYLE DS_SETFONT | DS_MODALFRAME | WS_CAPTION | WS_SYSMENU
EXSTYLE WS_EX_CLIENTEDGE | WS_EX_COMPOSITED
CAPTION "About"
FONT 8, "System", 0, 0, 0x0
BEGIN
    ICON            IDI_LINECACHE,IDC_MYICON,14,9,20,20
    LTEXT           "LineCache Version 1.0",IDC_STATIC,49,10,119,8,
                    SS_NOPREFIX
    LTEXT           "Copyright © 2008",IDC_STATIC,49,20,119,8
    DEFPUSHBUTTON   "OK",IDOK,195,6,30,11,WS_GROUP
END




--------------------
"Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины."
PM WWW ICQ   Вверх
mes
Дата 24.7.2008, 17:17 (ссылка) |  (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

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



Цитата(Kostik88 @  24.7.2008,  16:55 Найти цитируемый пост)
Можно увидеть каконибудь примерчик, если не трудно, я несовсем понял? 0о



2. установить флаг в CreateStruct перед вызовом функции CreateWindow  или в редакторе ресурсов (как показал GremlinProg)
3. типа такого:  SetWindowLong(hDlg,GCL_STYLE,  GetWindowLong(hDlg,GCL_STYLE ) | WS_CLIPCHILDREN );


 

Это сообщение отредактировал(а) mes - 24.7.2008, 17:19


--------------------
PM MAIL WWW   Вверх
Kostik88
Дата 24.7.2008, 17:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 76
Регистрация: 9.5.2008

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



Спасибо огромное mes,  GremlinProg. Вы меня опять выручили.
Всё заработало smile 
PM MAIL   Вверх
Letchik
Дата 7.2.2010, 10:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Не буду новую тему открывать и спрошу здесь smile
Говорят, что после процедуры рисования надо всегда удалять все объекты (RleaseDC, DeleteDC и т.д.). 
Только не понятно как тогда работает двойная буферизация. Ведь все, что я нарисовал должно храниться в отдельном контексте устройства, а мы его берём и удаляем... 
Ничего не понял!..
И почему нельзя в обработчике WM_CREATE создать контекст устройства не удаляя его до завершения программы? 
PM MAIL Skype   Вверх
ForceKeeper
Дата 21.4.2010, 22:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Нужна помощь с устранением мерцания статус бара (стандартный). В стиль главного окна добавил WS_CLIPCHILDREN, сама основная часть бара мерцать перестала, но вот созданные нам нем две секции с текстом как творили беспредел, так и творят. Пробовал добавлять клипчилдрен при создании бара
(CreateStatusWindow (WS_CHILD | WS_VISIBLE | WS_CLIPCHILDREN, "Готов", hwnd, ID_STATUS)) - не помогло.
PM MAIL WWW   Вверх
guenko
Дата 26.5.2010, 13:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 1
Регистрация: 26.5.2010

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



В InvalidateRec последний параметр используй FALSE
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "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.1098 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


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

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