Уроки Iczelion'а




Урок 9. Дочерние окна - часть 5


.IF ax==ButtonID shr eax,16 .IF ax==BN_CLICKED invoke SendMessage,hWnd,WM_COMMAND,IDM_GETTEXT,0 .ENDIF .ENDIF

Приведенный выше кусок кода является обработкой нажатия на кнопку. Сначала он проверяет нижнее слово wParam'а, чтобы убедиться, что ID контрола принадлежит кнопке. Если это так, он проверяет верхнее слово wParam'а, чтобы убедиться, что был послан код уведомления BN_CLICKED, то есть кнопка была нажата.

После этого идет собственно обработка нажатия на клавиш. Мы хотим получить текст из edit box'а и отобразить его в message box'е. Мы можем продублировать код в секции IDM_GETTEXT выше, но это не имеет смысла. Если мы сможем каким-либо образом послать сообщение WM_COMMAND с нижним словом wрaram, содержащим значение IDM_GETTEXT нашей процедуре окна, то избежим дублирования кода и упростим программу. Функция SendMessage - это ответ. Эта функция посылает любое сообщение любому окну с любым wparam'ом и lрaram'ом, которые нам понадобятся. Поэтому вместо дублирования кода мы вызываем SendMessage с хэндлом pодительского окна, WM_COMMAND, IDM_GETTEXT и 0. Это дает тот же эффект, что и выбор пункта меню "Get Text". Процедура окна не почувствует никакой pазницы.

Вы должны использовать эту технику так часто, насколько возможно, чтобы сделать ваш код более упорядоченным.

И напоследок. Hе забудьте функцию TranslateMessage в очереди сообщений. Так как вам нужно печатать текст в edit box'е, ваша программа должна транслировать ввод в читабельный текст. Если вы пропустите эту функцию, вы не сможете напечатать что-либо в вашем edit box'е.

[C] Iczelion, пер. Aquila.






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