Определить тип управления - PullRequest
       13

Определить тип управления

1 голос
/ 01 сентября 2009

Я пытаюсь сделать некоторые статические элементы управления прозрачными в диалоговом окне Windows, но у меня возникают проблемы с одним сообщением Windows.

Windows с радостью отправляет мне сообщение WM_CTLCOLORSTATIC при рисовании статических элементов управления, но это сообщение также отправляется только для чтения и отключает элементы управления для редактирования. Итак, если дать элементу управления только hwnd, как я могу узнать, что это за контроль?

Ответы [ 4 ]

3 голосов
/ 01 сентября 2009

Вы можете позвонить GetClassName , т.е.

// given controlHwnd passed to me
TCHAR controlClassName[128];

GetClassName(controlHwnd,controlClassName,128);

Затем вам нужно будет выполнить несколько сравнений строк на основе строки, т. Е. "Button" - так что не очень, но должно работать.

1 голос
/ 09 сентября 2009

В качестве оптимизации вы можете сначала попытаться найти свой первый Static элемент управления, используя GetClassName и сравнение строк, затем, как только вы найдете его, сохраните его атом класса, полученный с помощью GetClassLong(hWnd, GCW_ATOM), и сравните атомы с этого момента. .

1 голос
/ 01 сентября 2009

Используйте функцию GetClassName . Некоторые из предопределенных имен классов, таких как BUTTON, перечислены здесь . См. Также Как получить имя класса окна и другие атрибуты окна .

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

1 голос
/ 01 сентября 2009

Если у вас мало элементов управления, используйте GetDlgCtrlID () , чтобы получить идентификатор ресурса элемента управления.
С помощью этой информации вы можете отфильтровать любые элементы управления, которые вам не нужны.

...