Создание линков
Объясняю: при наведении курсора мыши на Static, цвет его текста меняется на синий, а если курсор за пределами, то текст чёрный.
Вообще поменять цвет текста я могу при обработке WM_CTLCOLORSTATIC, но это только один раз при запуске проги.
А мне нужно ещё и при наведении указателя!
WM_MOUSELEAVE
WM_MOUSEHOVER
WM_MOUSELEAVE
А эти сообщения посылаюся главному окну или окну Static'a?
А ещё интересно, какое сообщение нужно послать диалог. окну, чтобы оно изменило цвет своих контролов. WM_CTLCOLORSTATIC не катит. Я его посылаю с нулевыми параметрами, но цвет динамически не изменяется. Может есть какое сообщение, чтобы обновить цвета?
Изначально WM_CTLCOLORSTATIC посылается окну при запуске. И всё. В течение всей работы, оно не посылается!
Помимо этого есть ещё вариант с SetCapture, ReleaseСapture
А эти сообщения посылаюся главному окну или окну Static'a?
А ещё интересно, какое сообщение нужно послать диалог. окну, чтобы оно изменило цвет своих контролов. WM_CTLCOLORSTATIC не катит. Я его посылаю с нулевыми параметрами, но цвет динамически не изменяется. Может есть какое сообщение, чтобы обновить цвета?
В общем... Читать надо внимательней описалово - кто сказал, что это ты должен отсылать WM_CTLCOLORSTATIC. Оно шлётся родительскому окну дочерним, когда есть необходимость отрисовать(не только при запуске) дочернее окно, для этого тебе и передаётся в параметре хэндл DC дочернего окна.
Также имеет значение то что ты возвращаешь при обработке этой мессаги. а возвратить ты должен хэндл кисти для отрисовки бэкграунда дочернего окна(edit'a в данном случае).
Соответственно, чтобы изменить цвет контрола в нужный тебе момент необходимо послать ему косвенно WM_PAINT (к примеру через InvalidateRect). В остальном всё это есть в MSDN'e...:!!!: :!!!: :!!!:
Также в курсе, как узнать, что мышка над Static'ом, и что она покинула его!
MSDN тоже читаю !!!
Вопрос в другом! Как во время выполнения проги изменить цвет текста!!!!
Как обрабатывать 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.
То есть хотя бы так: Вот загрузилась прога, появилось окно. Цвет текста в нек-ром Static'e чёрный.
Но вот мы нажали на какую-то кнопку. Она поменяла значение глобальной переменной IsColor на true. А дальше нужно сделать что-то, чтобы цвет текста Static'a стал, к примеру, синим!
// Теперь стало понятнее?
Я же сказал: ВО ВРЕМЯ ВЫПОЛНЕНИЯ проги!
То есть хотя бы так: Вот загрузилась прога, появилось окно. Цвет текста в нек-ром Static'e чёрный.
Но вот мы нажали на какую-то кнопку. Она поменяла значение глобальной переменной IsColor на true. А дальше нужно сделать что-то, чтобы цвет текста Static'a стал, к примеру, синим!
// Теперь стало понятнее?
Блин,а я про что те писал? По моему это ты не доганяеш,ну тогда давай попорядку.
Имеем у тебя в проге где нить глобальную переменную :
DWORD g_dFontColor=0; //изначально черный цвет
Вот загрузилась твоя прога,и она в сообщении
WM_CTLCOLORSTATIC использует данную переменную чтобы установить цвет шрифта. далее где нить во время выполнения в программе ты меняеш эту переменную на нужный те цвет ну к примеру такой
g_dFontColor = RGB(255,222,0);//меняем на нужный цвет
InvalidateRect(hwnd_static,...);//гарантируем смену цвета
И все...
А как использовать эту переменную и как менять цвет смотри мою ссылку.
Надеюсь так понятнее?
Всё понял!
InvalidateRect() вкупе с GetClientRect() решили мою проблему.
СПАСИБО!
Всё понял!
InvalidateRect() вкупе с GetClientRect() решили мою проблему.
Зачем здесь те GetClientRect?
Хватит и одного InvalidateRect(hwnd,0,1);
Указав 0 в качестве второго аргумента это и будет приниматься функцей за всю клиентскую область данного хэндла контрола.