![]() |
Модераторы: feodorv, GremlinProg, xvr, Fixin |
![]() ![]() ![]() |
|
yngwie19 |
|
||||||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 829 Регистрация: 15.6.2008 Где: Новгород Репутация: нет Всего: нет |
Всем привет. Вот кусок кода
в макросе для WM_CTLCOLORSTATIC испльзуется функция под названием OnCtlColorStatic,
Скажите пожалуйста аргумент hdc получается автоматически? т.е винда внутренне делает:
Так да? Это сообщение отредактировал(а) yngwie19 - 28.2.2009, 20:03 |
||||||
|
|||||||
Earnest |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 33 Всего: 183 |
Винда ничего внутренне не делает здесь. Здесь "делают" макросы. И что они делают, элементарно посмотреть: они просто преобразовывают WPARAM или LPARAM к нужному типу или раскодируют их, в соответствии с конкретным сообщением.
Какого текста? Что ты узнать-то хотел? -------------------- ... |
|||
|
||||
GremlinProg |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2706 Регистрация: 9.8.2005 Где: Тюмень Репутация: 99 Всего: 106 |
yngwie19, Не ходи вокруг да около, опиши проблему
WM_CTLCOLORSTATIC - это уведомление родительского окна, которое введено для того, чтобы можно было управлять некоторыми настройками его дочерних девайсов перед выводом в них графики (удобно использовать в диалогах к простым компонентам типа STATIC или просто, когда процедуру окна этих контролов переназначать не хочется, а динамически выставить им цвет фона и текста надо) рисование этих контролов встроенное, согласно зарегистрированному классу, а это уведомление приходит из процедуры класса окна в ответ на сообщения WM_PAINT, WM_ERASEBKGND и т.п., где требуется отрисовка, т.е. девайсы для них получать не надо на сколько знаю, нет ни одного уведомления, которое требует распределять граф. девайс если девайс и нужен, то он передается в параметрах к сообщению все подобные сообщения маркируются словом Notification, которое обычно и подразумевает уведомление о смене определенного состояния компонента, которое может быть дополнительно скорректировано, если нужно, а может быть просто проигнорировано -------------------- "Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины." |
|||
|
||||
yngwie19 |
|
||||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 829 Регистрация: 15.6.2008 Где: Новгород Репутация: нет Всего: нет |
Немного не понятно да? Щас поясню. Допустим Я хочу в главное окно моего приложения вывести строку текста. Т.к это не диалог, то Я создаю окно со встроенным классом "STATIC". Далее обработываю сообщение WM_CTLCOLORSTATIC для того чтобы изменить фон. При описании функции, которая используется в макросе, у нее есть аргумент HDC hdc - контекст устройства. Мне интересно как он получается.
Т.е (HDC)wParam ? Т.е при передаче в функцию HBRUSH OnCtlColorStatic мы получаем контекст устройства главного окна? Точно такой-же который мы получили бы с помощью
если бы сделали в главном окне. |
||||
|
|||||
GremlinProg |
|
||||||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2706 Регистрация: 9.8.2005 Где: Тюмень Репутация: 99 Всего: 106 |
ни чего не понял что значит создать окно со встроенным классом? наследовать, чтоли, от класса STATIC? если так, то это бессмысленно смотри, есть 2 окна: A и B A - основное окно B - дочернее у каждого из окон выполняются своя процедура окна пусть процедура дочернего окна(B) выглядит, к примеру, так:
пример простой, понятно что дочерний контрол рисует текст "Вася Пупкин" если бы отсутствовала пятая строка этого фрагмента, то контрол рисовался бы одинаково всегда и повлиять на его вид извне было бы невозможно теперь процедура окна родителя(A):
что она делает? перехватывая WM_CTLCOLORSTATIC, она тем самым вклинивается в работу окна B перед рисованием(см. первый фрагмент, строка 5) и заставляет его рисоваться на желтом фоне зелеными буквами вот для этого и нужен WM_CTLCOLORSTATIC, ни чего ни куда не преобразуется и не создается это уведомление нужно понимать ровно так, как оно здесь описано, смотри внимательно код: два фрагмента - каждый для своего окна чтобы использовать WM_CTLCOLORSTATIC, нужно иметь эту связку из двух окон: родительское и дочернее, а диалоговое это приложение или нет - не важно (макрос HANDLE_MSG ни какой функциональной нагрузки в обработку сообщений не вносит, он лишь позволяет разделить свитч(switch) процедуры окна на мелкие процедурки, которые, возможно, проще понимать, разбирать, модифицировать) -------------------- "Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины." |
||||||
|
|||||||
![]() ![]() ![]() |
Правила форума "C/C++: Системное программирование и WinAPI" | |
|
На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы . Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Системное программирование и WinAPI | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |