Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Создание линков

11K
29 декабря 2005 года
DWORD
22 / / 28.12.2005
Подскажите, пожалуйста, как в проге сделать Static наподобие инет-линков.
Объясняю: при наведении курсора мыши на Static, цвет его текста меняется на синий, а если курсор за пределами, то текст чёрный.

Вообще поменять цвет текста я могу при обработке WM_CTLCOLORSTATIC, но это только один раз при запуске проги.
А мне нужно ещё и при наведении указателя!
398
29 декабря 2005 года
Alexandoros
630 / / 21.10.2005
WM_MOUSEHOVER
WM_MOUSELEAVE
11K
30 декабря 2005 года
DWORD
22 / / 28.12.2005
Цитата:
Originally posted by Alexandoros
WM_MOUSEHOVER
WM_MOUSELEAVE



А эти сообщения посылаюся главному окну или окну Static'a?

А ещё интересно, какое сообщение нужно послать диалог. окну, чтобы оно изменило цвет своих контролов. WM_CTLCOLORSTATIC не катит. Я его посылаю с нулевыми параметрами, но цвет динамически не изменяется. Может есть какое сообщение, чтобы обновить цвета?
Изначально WM_CTLCOLORSTATIC посылается окну при запуске. И всё. В течение всей работы, оно не посылается!

1.8K
30 декабря 2005 года
k3Eahn
365 / / 19.12.2005
С WM_MOUSELEAVE, WM_MOUSEHOVER надо юзать TrackMouseEvent.
Помимо этого есть ещё вариант с SetCapture, ReleaseСapture
Цитата:
Originally posted by DWORD
А эти сообщения посылаюся главному окну или окну Static'a?

А ещё интересно, какое сообщение нужно послать диалог. окну, чтобы оно изменило цвет своих контролов. WM_CTLCOLORSTATIC не катит. Я его посылаю с нулевыми параметрами, но цвет динамически не изменяется. Может есть какое сообщение, чтобы обновить цвета?



В общем... Читать надо внимательней описалово - кто сказал, что это ты должен отсылать WM_CTLCOLORSTATIC. Оно шлётся родительскому окну дочерним, когда есть необходимость отрисовать(не только при запуске) дочернее окно, для этого тебе и передаётся в параметре хэндл DC дочернего окна.

Также имеет значение то что ты возвращаешь при обработке этой мессаги. а возвратить ты должен хэндл кисти для отрисовки бэкграунда дочернего окна(edit'a в данном случае).
Соответственно, чтобы изменить цвет контрола в нужный тебе момент необходимо послать ему косвенно WM_PAINT (к примеру через InvalidateRect). В остальном всё это есть в MSDN'e...:!!!: :!!!: :!!!:

11K
30 декабря 2005 года
DWORD
22 / / 28.12.2005
Как обрабатывать WM_CTLCOLORSTATIC я и сам знаю!
Также в курсе, как узнать, что мышка над Static'ом, и что она покинула его!
MSDN тоже читаю !!!

Вопрос в другом! Как во время выполнения проги изменить цвет текста!!!!
406
30 декабря 2005 года
vitaly2003s
481 / / 27.07.2004
Цитата:
Originally posted by DWORD
Как обрабатывать WM_CTLCOLORSTATIC я и сам знаю!
Также в курсе, как узнать, что мышка над Static'ом, и что она покинула его!
MSDN тоже читаю !!!

Вопрос в другом! Как во время выполнения проги изменить цвет текста!!!!



Ну ты ведь наверно знаеш что при соббщении WM_CTLCOLORSTATIC можно изменить цвет. ну так отлавливаеш ето сообщение и здесь меняеш на нужный цвет и причем делаеш это постоянно. то есть у тебя должна быть статичная или глобальная переменная которая хранит твой цвет. которую ты и используеш во время WM_CTLCOLORSTATIC. А цвет изменить - допустим где нить ты устанавливаеш эту глобальную переменную в новое значение и отсылаеш статик контролу тотже InvalidateRect и он перерисовывается терь с новым цветом.
И почитай тут,http://forum.codenet.ru/showthread.php?s=&threadid=26523&perpage=25&highlight=WMCTLCOLOREDIT&pagenumber=4
Здесь было сказано про WM_CTLCOLOREDIT но это аналогично и для WM_CTLCOLORSTATIC.

11K
31 декабря 2005 года
DWORD
22 / / 28.12.2005
Я же сказал: ВО ВРЕМЯ ВЫПОЛНЕНИЯ проги!

То есть хотя бы так: Вот загрузилась прога, появилось окно. Цвет текста в нек-ром Static'e чёрный.
Но вот мы нажали на какую-то кнопку. Она поменяла значение глобальной переменной IsColor на true. А дальше нужно сделать что-то, чтобы цвет текста Static'a стал, к примеру, синим!

// Теперь стало понятнее?
406
31 декабря 2005 года
vitaly2003s
481 / / 27.07.2004
Цитата:
Originally posted by DWORD
Я же сказал: ВО ВРЕМЯ ВЫПОЛНЕНИЯ проги!

То есть хотя бы так: Вот загрузилась прога, появилось окно. Цвет текста в нек-ром Static'e чёрный.
Но вот мы нажали на какую-то кнопку. Она поменяла значение глобальной переменной IsColor на true. А дальше нужно сделать что-то, чтобы цвет текста Static'a стал, к примеру, синим!

// Теперь стало понятнее?


Блин,а я про что те писал? По моему это ты не доганяеш,ну тогда давай попорядку.
Имеем у тебя в проге где нить глобальную переменную :
DWORD g_dFontColor=0; //изначально черный цвет

Вот загрузилась твоя прога,и она в сообщении
WM_CTLCOLORSTATIC использует данную переменную чтобы установить цвет шрифта. далее где нить во время выполнения в программе ты меняеш эту переменную на нужный те цвет ну к примеру такой
g_dFontColor = RGB(255,222,0);//меняем на нужный цвет
InvalidateRect(hwnd_static,...);//гарантируем смену цвета

И все...
А как использовать эту переменную и как менять цвет смотри мою ссылку.
Надеюсь так понятнее?

11K
01 января 2006 года
DWORD
22 / / 28.12.2005
СПАСИБО!
Всё понял!

InvalidateRect() вкупе с GetClientRect() решили мою проблему.
406
01 января 2006 года
vitaly2003s
481 / / 27.07.2004
Цитата:
Originally posted by DWORD
СПАСИБО!
Всё понял!

InvalidateRect() вкупе с GetClientRect() решили мою проблему.


Зачем здесь те GetClientRect?
Хватит и одного InvalidateRect(hwnd,0,1);
Указав 0 в качестве второго аргумента это и будет приниматься функцей за всю клиентскую область данного хэндла контрола.

11K
01 января 2006 года
DWORD
22 / / 28.12.2005
Ага, понял.8)
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог