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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Фон элементов управления 
V
    Опции темы
Kostik88
Дата 28.7.2008, 00:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



mekhanikus,  так всё правильно, обработчик события WM_CTLCOLORSTATIC возвращает значения BOOL - го типа и поэтому LRESULT, если ставить значение HBRUSH компилятор просто напросто будет ругаться.

Кому интересно про включение ХP те могут глянуть  сайтик, похожая проблема, такаяже ф-ция.... Но почемуто у меня она отказывается работать.

http://forum.sources.ru/index.php?showtopic=219977

Добавлено через 13 минут и 23 секунды
Просто будет выдаваться ошибка:

'return' : cannot convert from 'HBRUSH' to 'BOOL'

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


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


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

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



Цитата(Kostik88 @  25.7.2008,  17:36 Найти цитируемый пост)
Вот к примеру я пишу обработку сообщения для чекбокса :
Код


case WM_CTLCOLORSTATIC: 
         SetBkMode((HDC)GetWindowDC(hChec),TRANSPARENT);
         return (LRESULT) GetSysColorBrush(COLOR_BTNFACE);   
      break;


Во первых где ты ловишь сообщение? у родителя ? приходит или нет?
Во вторых не кажется ли окончание static подозрительным? 
Чекбокс как никак кнопка. Мне кажется, что в данном случае надо использовать WM_CTLCOLORBTN  smile 





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


Шустрый
*


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

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



Цитата

Чекбокс как никак кнопка. Мне кажется, что в данном случае надо использовать WM_CTLCOLORBTN  

Я тоже так думаю=) только не шипко помогло(

Цитата

Во первых где ты ловишь сообщение? у родителя ?


Сообщение ловлю у родителя.

Цитата

приходит или нет?



приходит.
PM MAIL   Вверх
Dem_max
Дата 28.7.2008, 06:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1780
Регистрация: 12.4.2007

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



Можно еще так

#include <uxtheme.h>
#pragma comment(lib, "UxTheme.lib")

SetWindowTheme(hwndList, L"Explorer", NULL);


--------------------
Американские программисты долго не могли понять, почему русские при зависании Windоws всё время повторяют "Твой зайка написал" ("Yоur bunnу wrоte")
PM MAIL   Вверх
Kostik88
Дата 28.7.2008, 11:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Вроде бы решил проблему:

для бутонов:

Код

     case WM_CTLCOLORBTN:
{    
         
         return (LRESULT) GetStockObject(WHITE_BRUSH);  
          }


и для чекбокса:

Код

case WM_CTLCOLORSTATIC: 
          {    
                    
         return (LRESULT) GetStockObject(WHITE_BRUSH);  
          }



теперь фон кнопок и чекбоксов меняется.

Добавлено через 2 минуты и 54 секунды
А если хочется поставить любой другой фон то можно воспользоваться ф-цией CreateSolidBrush =)
PM MAIL   Вверх
mekhanikus
Дата 28.7.2008, 15:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вольноопределяющийся
*


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

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



Странно.
Читаем про WM_CTLCOLORSTATIC

Цитата

Return Value

If an application processes this message, the return value is a handle to a brush that the system uses to paint the background of the static control.


Тоже самое про WM_CTLCOLORBTN.

Кинь исходник, если не жалко, самый минимум, как ты кнопки делаешь и красишь.
Интересно самомы скомпилить.

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


Шустрый
*


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

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



mekhanikus,  Я не совсем понял что тебя в этих сообщения не устраивает и в чём твое негодование относительно цитаты из msdn?
Код выкладывать не буду ибо там больше 3 тысяч строк кода. Хочешь проверить сделай простой проект прикрепи к нему диалог с помощью Resource View и кинь на него кнопочки и проверь эти сообщения.
PM MAIL   Вверх
Draeden
Дата 28.7.2008, 18:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Любопытная задачка: нужно поменять значения поля в WNDCLASS созданного ранее через RegisterWindowClass.
Интересно посмотреть, есть ли красивое решение...
PM MAIL   Вверх
mes
Дата 28.7.2008, 23:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Цитата(Draeden @  28.7.2008,  18:43 Найти цитируемый пост)
Любопытная задачка: нужно поменять значения поля в WNDCLASS созданного ранее через RegisterWindowClass.
Интересно посмотреть, есть ли красивое решение... 

если я правильно понял то Вам нужно SetClassLong

Добавлено через 1 минуту и 44 секунды
также непонятно почему вопрос поместили в этом топике.. в чем связь с темой ?? 


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


Вольноопределяющийся
*


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

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



Цитата(Kostik88 @ 28.7.2008,  16:14)
в чём твое негодование относительно цитаты из msdn?


Никакого негодования, спокоен как удав.

Просто, у меня был опыт раскрашивания статиков.
При этом в DialogProc сообщения обрабатывались макросами HANDLE_MSG,
с последующим вызовом соответствующих функций.
Так вот функция раскраски статиков возвращала HBRUSH, и все работало.

Сейчас попробовал стелать тоже самое без HANDLE_MSG,
действительно, без (LRESULT) ругается. smile 
Оказывается в HANDLE_MSG сделано тоже самое - преобразование в LRESULT.
Век живи - век учись.  smile 

Кстати PUSHBUTTON у меня нехотят краситься никак.
PM MAIL   Вверх
Draeden
Дата 29.7.2008, 13:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата(mes @ 28.7.2008,  23:26)
Цитата(Draeden @  28.7.2008,  18:43 Найти цитируемый пост)
Любопытная задачка: нужно поменять значения поля в WNDCLASS созданного ранее через RegisterWindowClass.
Интересно посмотреть, есть ли красивое решение... 

если я правильно понял то Вам нужно SetClassLong

Добавлено @ 23:28
также непонятно почему вопрос поместили в этом топике.. в чем связь с темой ?? 

Цитата(Draeden @  28.7.2008,  18:43 Найти цитируемый пост)
Любопытная задачка: нужно поменять значения поля в WNDCLASS созданного ранее через RegisterWindowClass.
Интересно посмотреть, есть ли красивое решение... 

если я правильно понял то Вам нужно SetClassLong

Добавлено @ 23:28
также непонятно почему вопрос поместили в этом топике.. в чем связь с темой ??

Это не мой вопрос. Автор темы хочет поменять цвет фона для определённого окна, а также для всех его дочерних окон. Цвет фона определяется полем в структуре WNDCLASS которая регистрируется функцией RegisterClass. Таким образом нужно

1. найти все дочерние окна
2. определить классы всех окон - родительского и дочерних ( этот класс возвращается функцией RegisterClass и указывается при вызове CreateWindow )
3. найти структуры WNDCLASS для найденных классов ( я не вижу документированного способа сделать это )
4. изменить соотвтесвующее поля в этой структуре ( кисть фона )
5. обновить родительское окно со всеми дочерними окнами

Проблема - п.3, всё остальное сделать просто.
PM MAIL   Вверх
Kostik88
Дата 29.7.2008, 14:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Draeden,  если Вы не заметили то вопрос уже решён, кодом в несколько строк.
PM MAIL   Вверх
mes
Дата 29.7.2008, 14:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Цитата(Draeden @  29.7.2008,  13:57 Найти цитируемый пост)
3. найти структуры WNDCLASS для найденных классов ( я не вижу документированного способа сделать это )


Цитата(Draeden @  29.7.2008,  13:57 Найти цитируемый пост)
Это не мой вопрос. Автор темы хочет поменять цвет фона для определённого окна, а также для всех его дочерних окон. Цвет фона определяется полем в структуре WNDCLASS которая регистрируется функцией RegisterClass. Таким образом нужно

Цвет фона класса окон, а не отдельно взятого окна.  
Цитата(Draeden @  29.7.2008,  13:57 Найти цитируемый пост)
3. найти структуры WNDCLASS для найденных классов ( я не вижу документированного способа сделать это )

Цитата(mes @  28.7.2008,  23:26 Найти цитируемый пост)
... Вам нужно SetClassLong

http://msdn.microsoft.com/en-us/library/ms633588(VS.85).aspx



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


Новичок



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

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



И то верно, надо MSDN внимательнее читать smile
PM MAIL   Вверх
Dem_max
Дата 30.7.2008, 07:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1780
Регистрация: 12.4.2007

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



Kostik88
Цитата

теперь фон кнопок и чекбоксов меняется.
А если хочется поставить любой другой фон то можно воспользоваться ф-цией CreateSolidBrush =)


Ага а ты попробуй Оформление XP поставить на классический вид или оформление другое поставь из сторонних разработчиков и получишь гимморой, и тогда фон будет другим цветом и твои статики будут закрашиваться белым цветом, а подбирать через СreateSolidBrush  у тебя не получится.

А чтою этого небыло используется SetWindowTheme(hwndList, L"Explorer", NULL), которая сама автоматически раскрашивает контролы с установленной цветовой схемой в системе, при этом эта функция вызывается только для родительского окна или для диалога который создается на TabControl/


--------------------
Американские программисты долго не могли понять, почему русские при зависании Windоws всё время повторяют "Твой зайка написал" ("Yоur bunnу wrоte")
PM MAIL   Вверх
Страницы: (3) Все 1 [2] 3 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Системное программирование и WinAPI"
Fixin
GremlinProg
xvr
feodorv
  • Большое количество информации и примеров с использованием функций WinAPI можно найти в MSDN
  • Описание сообщений, уведомлений и примеров с использованием компонент WinAPI (BUTTON, EDIT, STATIC, и т.п.), можно найти в MSDN Control Library
  • Непосредственно, перед созданием новой темы, проверьте заголовок и удостоверьтесь, что он отражает суть обсуждения.
  • После заполнения поля "Название темы", обратите внимание на наличие и содержание панели "А здесь смотрели?", возможно Ваш вопрос уже был решен.
  • Приводите часть кода, в которой предположительно находится проблема или ошибка.
  • Если указываете код, пользуйтесь тегами [code][/code], или их кнопочными аналогами.
  • Если вопрос решен, воспользуйтесь соответствующей ссылкой, расположенной напротив названия темы.
  • Один топик - один вопрос!
  • Перед тем как создать тему - прочтите это .

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


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

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


 




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


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

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