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

Поиск:

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


Опытный
**


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

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



Здравствуйте. Вопрос вот какой. У меня есть окно класса "static" для которого Я хочу изменить цвет текста. Делаю так
Код

case WM_CTLCOLORSTATIC:
        {
            int i = GetWindowLong((HWND)lParam,GWL_ID);
            
            
                SetTextColor((HDC)wParam,RGB(0,255,0));
                
                return (LRESULT)CreateSolidBrush(GetSysColor(COLOR_BTNHIGHLIGHT));
                                 }
            

так все работает, а так нет
Код

case WM_CTLCOLORSTATIC:
        {
            int i = GetWindowLong((HWND)lParam,GWL_ID);
            
            
                SetTextColor((HDC)wParam,RGB(0,255,0));
                
                return 0;
                                 }

почему когда возвращаю 0, то текст не меняется, как Я понимаю WM_CTLCOLORSTATIC, меняет фон который находится за текстом
PM MAIL   Вверх
mes
Дата 20.5.2009, 11:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



а может для начала заглянуть в msdn
http://msdn.microsoft.com/ko-kr/library/bb...-us,VS.85).aspx

Цитата

If a dialog box procedure handles this message, it should cast the desired return value to a BOOL and return the value directly. If the dialog box procedure returns FALSE, then default message handling is performed.

0 расценивается как FALSE.

P.S. в первом возвращении кисти излишне.   smile 



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


Эксперт
****


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

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



а я сразу и не понял, что это контекст диалога )
все верно

mes+1 за отличные навыки в телепатии )


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


Опытный
**


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

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



Цитата(GremlinProg @  20.5.2009,  11:44 Найти цитируемый пост)
а я сразу и не понял, что это контекст диалога 

там контекст главного окна
PM MAIL   Вверх
GremlinProg
Дата 20.5.2009, 12:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Цитата(yngwie19 @  20.5.2009,  13:53 Найти цитируемый пост)
там контекст главного окна

покажи код

Добавлено через 5 минут и 44 секунды
в любом случае, возвращение 0 либо из диалога, либо из полновесного окна, означает отсутствие обработки уведомления, т.к. WM_CTLCOLORSTATIC посылается безусловно, и проверить наличие его обработки можно только по результату, возвращенного из оконной процедуры


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


Опытный
**


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

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



GremlinProg, ок Спасибо разобрался.

Добавлено через 2 минуты и 59 секунд
а если scrollbar созданы как стили главного окна WS_VSCROLL или WS_HSCROLL, то как тогда сделать их субклассинг?
PM MAIL   Вверх
GremlinProg
Дата 20.5.2009, 12:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Цитата(yngwie19 @  20.5.2009,  14:24 Найти цитируемый пост)
а если scrollbar созданы как стили главного окна WS_VSCROLL или WS_HSCROLL, то как тогда сделать их субклассинг?

а что нужно субклассить? WM_HSCROLL и WM_VSCROLL?
они и так приходят в главное окно, так и перекрываются, тут субклассинг не требуется


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


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


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

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



Цитата(yngwie19 @  20.5.2009,  11:24 Найти цитируемый пост)
а если scrollbar созданы как стили главного окна WS_VSCROLL или WS_HSCROLL, то как тогда сделать их субклассинг? 

получайте хэндл  такого скрола и  сабклассите также как и  любой другй скрол/окно smile

P.S. правда о возможности получения  хэндла такого скрола не помню, но не вижу причин почему не возможно. 

Это сообщение отредактировал(а) mes - 20.5.2009, 12:46


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


Эксперт
****


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

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



Цитата(mes @  20.5.2009,  14:41 Найти цитируемый пост)
получайте хэндлер такого скрола и также как и для любого другого скрола/окна

нет, такой scrollbar не реализуется отдельным окном, он находится в неклиентской области главного окна и управляется процедурой стандартного окна, с DefWindowProc и стандартными функциями GetScrollPos, SetScrollPos и т.п.


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


Опытный
**


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

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



GremlinProg, дак а если ScrollBar созданы как CreateWindow(), то они тоже проходят в процедуру главного окна, зачем тогда тут субклассинг?
PM MAIL   Вверх
mes
Дата 20.5.2009, 13:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Цитата(yngwie19 @  20.5.2009,  11:47 Найти цитируемый пост)
дак а если ScrollBar созданы как CreateWindow(), то они тоже проходят в процедуру главного окна, зачем тогда тут субклассинг? 

помойму Вы путаетесь, в том что представляет из себя сабклассинг.

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



Это сообщение отредактировал(а) mes - 20.5.2009, 13:14


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


Эксперт
****


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

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



Цитата(mes @  20.5.2009,  15:06 Найти цитируемый пост)
помойму Вы путаетесь, в том что представляет из себя сабклассинг.

да, я тоже так считаю,
yngwie19, посмотри статьи еще и по этой ссылке, по моему этого более чем достаточно (хотя, такое решение должно было быть на первом месте, по идее)


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


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


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

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



Цитата(GremlinProg @  20.5.2009,  12:15 Найти цитируемый пост)
по этой ссылке

вот еще с этого форума:
http://forum.vingrad.ru/forum/topic-69246.html

как раз описывается и сабклассинг и суперклассинг.

Главное не пугайтесь этих слов -  еще раз повторюсь, это всего лишь задание поведения окну.
И как обычно для того чтоб не повторять  реализацию обычного (не измененного нами) поведения, мы передаем необратанные команды стандартному для этого окна/класса обработчику.
 

Это сообщение отредактировал(а) mes - 20.5.2009, 13:25


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


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


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

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



Цитата(GremlinProg @  20.5.2009,  11:17 Найти цитируемый пост)
в любом случае, возвращение 0 либо из диалога, либо из полновесного окна, означает отсутствие обработки уведомления, 

если мне память не изменяет (и надеюсь меня поправят если ошибаюсь), 
 то  в подобных случаях тип результата трактуется по значению возвращенного результата.
0 и 1 - bool (false и true)
иначе то, что подразумевается по контексту, например кисть (как в случае из первого поста)





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


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

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