| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Системное программирование и WinAPI > Вопрос про WM_CTLCOLORSTATIC |
| Автор: yngwie19 28.2.2009, 20:00 | ||||||
Всем привет. Вот кусок кода
в макросе для WM_CTLCOLORSTATIC испльзуется функция под названием OnCtlColorStatic,
Скажите пожалуйста аргумент hdc получается автоматически? т.е винда внутренне делает:
Так да? |
| Автор: Earnest 2.3.2009, 14:25 | ||
Винда ничего внутренне не делает здесь. Здесь "делают" макросы. И что они делают, элементарно посмотреть: они просто преобразовывают WPARAM или LPARAM к нужному типу или раскодируют их, в соответствии с конкретным сообщением.
Какого текста? Что ты узнать-то хотел? |
| Автор: GremlinProg 2.3.2009, 15:10 |
| yngwie19, Не ходи вокруг да около, опиши проблему WM_CTLCOLORSTATIC - это уведомление родительского окна, которое введено для того, чтобы можно было управлять некоторыми настройками его дочерних девайсов перед выводом в них графики (удобно использовать в диалогах к простым компонентам типа STATIC или просто, когда процедуру окна этих контролов переназначать не хочется, а динамически выставить им цвет фона и текста надо) рисование этих контролов встроенное, согласно зарегистрированному классу, а это уведомление приходит из процедуры класса окна в ответ на сообщения WM_PAINT, WM_ERASEBKGND и т.п., где требуется отрисовка, т.е. девайсы для них получать не надо на сколько знаю, нет ни одного уведомления, которое требует распределять граф. девайс если девайс и нужен, то он передается в параметрах к сообщению все подобные сообщения маркируются словом Notification, которое обычно и подразумевает уведомление о смене определенного состояния компонента, которое может быть дополнительно скорректировано, если нужно, а может быть просто проигнорировано |
| Автор: yngwie19 2.3.2009, 17:24 | ||||
Немного не понятно да? Щас поясню. Допустим Я хочу в главное окно моего приложения вывести строку текста. Т.к это не диалог, то Я создаю окно со встроенным классом "STATIC". Далее обработываю сообщение WM_CTLCOLORSTATIC для того чтобы изменить фон. При описании функции, которая используется в макросе, у нее есть аргумент HDC hdc - контекст устройства. Мне интересно как он получается.
Т.е (HDC)wParam ? Т.е при передаче в функцию HBRUSH OnCtlColorStatic мы получаем контекст устройства главного окна? Точно такой-же который мы получили бы с помощью
если бы сделали в главном окне. |