Форум программистов
 
Расширенный поиск
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

Вернуться   Форум программистов > Низкоуровневое программирование > Win Api
Регистрация

Восстановить пароль
Повторная активизация e-mail

Excel VBA, CAD, Софт, ОС, Windows, Ubuntu, Android, VPS
Win Api, Assembler, C++, Java, Pascal, Lazarus, Delphi, OpenGL, DirectX
C#, Qt, .NET, ASP.NET, Windows Forms, ADO.NET, Framework, WPF, UWP, WinRT, XAML
HTML, CSS, JavaScript, Ajax, PHP, Perl, Python, Ruby, SQL, WordPress, API, XML, JSON, ActionScript, Flash

Ответ
 
Опции темы
Старый 18.11.2016, 11:25   #1
BLACK_RAIN
Форумчанин
 
Регистрация: 13.02.2012
Сообщений: 427
Репутация: 87
Сообщение FillRect и дочерние контролы

Здравствуйте.
Давно интересует такой вопрос.
Имеем статик со стилем SS_BITMAP и кнопки на нам.
Если залить его FillRect(dcStatic, r, brush);, то заливаются все дочерние контролы статика. Как сделать, чтобы они не заливались?
Поиск приводит только к GetDCex(static, 0, DCX_CLIPCHILDREN or DCX_CACHE); и WM_SETREDRAW, но это не помогает.
Создавать регион тоже не вариант, так как количество и позиция контролов может меняться.
BLACK_RAIN вне форума   Ответить с цитированием
Старый 18.11.2016, 11:26   #2
waleri
Профессионал
 
Регистрация: 13.07.2012
Адрес: Нижний Новгород
Сообщений: 4,753
Репутация: 1438
По умолчанию

WS_CLIPCHILDREN
А вы уверены, что они дочерние?
Попробуйте так же WS_CLIPSIBLINGS.
waleri вне форума   Ответить с цитированием
Старый 18.11.2016, 11:30   #3
BLACK_RAIN
Форумчанин
 
Регистрация: 13.02.2012
Сообщений: 427
Репутация: 87
По умолчанию

Цитата:
Сообщение от waleri Посмотреть сообщение
WS_CLIPCHILDREN
А вы уверены, что они дочерние?
Попробуйте так же WS_CLIPSIBLINGS.
Это, конечно же, тоже пробовал. Не помогает.
Могу код показать.
Код:

  fPanel := CreateWindowEx(WS_EX_CLIENTEDGE,'static','',
                      WS_CHILD    or WS_VISIBLE or SS_NOTIFY or SS_BITMAP,
                     0,0, 666,666, fRoot, 0,HInstance,nil);
  dcPanel := GetDC(fPanel);
  //или так
  dcPanel := GetDCex(fPanel, 0, DCX_CLIPCHILDREN or DCX_CACHE);
  btn := CreateWindowEx(WS_EX_CLIENTEDGE,'button','', WS_CHILD or WS_VISIBLE ,
                     0,0, 50,20, fPanel, 0,HInstance,nil);
					 
  GetClientRect(fPanel,r);
  FillRect(dcPanel,r,brushPanel);

WS_CLIPCHILDREN / WS_CLIPSIBLINGS - это не работает, если у статика есть стиль SS_BITMAP. А если его нет, тогда после FillRect система сама перересует статик в сообщении WM_CTLCOLORSTATIC (но без заливки дочерних).
А мне надо самому перерисовывать.

Последний раз редактировалось BLACK_RAIN; 18.11.2016 в 12:24.
BLACK_RAIN вне форума   Ответить с цитированием
Старый 18.11.2016, 12:28   #4
waleri
Профессионал
 
Регистрация: 13.07.2012
Адрес: Нижний Новгород
Сообщений: 4,753
Репутация: 1438
По умолчанию

Так может стоит перенести GetDC *после* создания дочернего окна?
Глядишь и WS_CLIPCHILDREN заработает...
waleri вне форума   Ответить с цитированием
Старый 18.11.2016, 13:51   #5
BLACK_RAIN
Форумчанин
 
Регистрация: 13.02.2012
Сообщений: 427
Репутация: 87
По умолчанию

Цитата:
Сообщение от waleri Посмотреть сообщение
Так может стоит перенести GetDC *после* создания дочернего окна?
Глядишь и WS_CLIPCHILDREN заработает...
ага, опять протупил.
но тогда получается, что каждый раз при ресайзе надо освобождать DC и получать его заново?
BLACK_RAIN вне форума   Ответить с цитированием
Старый 18.11.2016, 21:06   #6
waleri
Профессионал
 
Регистрация: 13.07.2012
Адрес: Нижний Новгород
Сообщений: 4,753
Репутация: 1438
По умолчанию

А вообще зачем хранить DC?
Лучше получать его каждый раз когда надо рисовать.
waleri вне форума   Ответить с цитированием
Старый 18.11.2016, 21:47   #7
Pavia
Лис
Профессионал
 
Аватар для Pavia
 
Регистрация: 18.09.2015
Сообщений: 1,011
Репутация: 1120
По умолчанию

Цитата:
Сообщение от waleri Посмотреть сообщение
А вообще зачем хранить DC?
Лучше получать его каждый раз когда надо рисовать.
А можно пример когда без получения в каждой функции не обойтись?
Кроме экономии хэндлов не вижу тому причин. Да и Delphi к примеру их хранит и не получает каждый раз.
__________________
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
У дзен программиста программа делает то что он хотел, а не то что он написал .
Pavia вне форума   Ответить с цитированием
Старый 18.11.2016, 22:14   #8
waleri
Профессионал
 
Регистрация: 13.07.2012
Адрес: Нижний Новгород
Сообщений: 4,753
Репутация: 1438
По умолчанию

Цитата:
Сообщение от Pavia Посмотреть сообщение
А можно пример когда без получения в каждой функции не обойтись?
Не понял вопроса. Если есть много функций, где нужен DC то наверно лучше его передавать как параметр функции и вызывать их когда нужно рисовать.
waleri вне форума   Ответить с цитированием
Старый 20.11.2016, 12:02   #9
BLACK_RAIN
Форумчанин
 
Регистрация: 13.02.2012
Сообщений: 427
Репутация: 87
По умолчанию

Цитата:
Сообщение от waleri Посмотреть сообщение
А вообще зачем хранить DC?
Например, когда TextOut() по таймеру.
BLACK_RAIN вне форума   Ответить с цитированием
Старый 20.11.2016, 12:23   #10
waleri
Профессионал
 
Регистрация: 13.07.2012
Адрес: Нижний Новгород
Сообщений: 4,753
Репутация: 1438
По умолчанию

А что мешает получать DC при обработке таймера?
waleri вне форума   Ответить с цитированием
Ответ



Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Пропали контролы с формы Дамир Общие вопросы .NET 6 12.01.2017 00:16
пользовательские контролы ts-alan ASP.NET 3 30.03.2015 17:18
Контролы для Silverlight (4,5) LeniumSoft WPF, UWP, WinRT, XAML 1 07.07.2012 20:32
Контролы SilverLight Elkenos WPF, UWP, WinRT, XAML 1 12.02.2011 11:23
Контролы на baloonhint Toxa Компоненты Delphi 0 06.11.2007 18:33




02:45.


Powered by vBulletin® Version 3.8.8 Beta 2
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.

Покупайте на сайте www.skinon.ru уникальные чехлы и наклейки для телефонов.
купить трафик


как улучшить посещаемость, а также решения по монетизации сайтов, видео и приложений

RusProfile.ru


Справочник российских юридических лиц и организаций.
Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru