Уроки Iczelion'а



         

Урок 27. Тултип-контрол - часть 10


invoke SendMessage,hwndTool,TTM_ADDTOOL,NULL,lpti

После того, как все 4 tool'а зарегистрированы, мы можем перейти к кнопкам

на диалоговом окне. Мы можем обрабатывать каждую кнопку с

помошью ее ID, но

это утомительно. Вместо этого мы используем EnumChildWindows

ApI, чтобы

перечислить все контролы на диалоговом окне и затем зарегистрировать для

каждого из них подсказку. EnumChildWindows имеет следующий синтаксис:

EnumChildWindows proto hWnd:DWORD, lpEnumFunc:DWORD, lparam:DWORD

hWnd - хэндл родительского окна. lрEnumFunc - адрес функции

EnumChildproc,

которая будет вызываться для каждого перечисленного контрола.

lparam -

заданное приложением значение, которое будет передано

EnumChildproc. У этой

функции следующее определение:

EnumChildproc proto hwndChild:DWORD, lparam:DWORD

hwndChild - хэндл контрола, найденного EnumChildWindows.

lparam - это тоже

значение, что вы передали EnumChildWindow. В нашем примере мы вызываем

EnumChildWindows следующим образом:

invoke EnumChildWindows,hDlg,addr EnumChild,addr ti

Мы передаем адрес структуры TOOLINFO в параметре

lparam, потому что мы

будем регистрировать подсказки для каждого дочерний контрол в функции

EnumChild. Если мы не будем использовать данный метода, нам придется объявить

глобальную переменную, чтобы предотвратить баги.

Когда мы вызываем EnumchildWindows, Windows перечислит дочерние конролы

нашего диалогового окна и вызовет для каждого из ни

функцию Enumchild. То

есть, если наше диалоговое окно имеет два контрола, EnumChild будет вызван

дважды.

Функция EnumChild заполнит соответствующие поля структуры TOOLINFO и

зарегистрирует tool.

EnumChild proc uses edi hwndChild:DWORD,lparam:DWORD

LOCAL buffer[256]:BYTE

mov edi,lparam

assume edi:ptr TOOLINFO

push hwndChild

pop [edi].uId ; we use the whole client area of the control as the tool

or [edi].uFlags,TTF_IDISHWND

invoke GetWindowText,hwndChild,addr buffer,255

lea eax,buffer ; use the window text as the tooltip text

mov [edi].lpszText,eax

invoke SendMessage,hwndTool,TTM_ADDTOOL,NULL,edi

assume edi:nothing

ret

EnumChild endp

Заметьте, что в этом случае мы используем другой тип tool'ов, покрывающий

всю клиентскую область окна. Поэтому нам нужно заполнить поле uID хэндлом

окна, которое содержит tool. Также мы указываем флаг TTF_IDISHWND в

параметре uFlags.






Содержание  Назад  Вперед