Управление кнопками Minimize, Maximize, Help и Close в заголовке окна
Очередная развлекуха на Ассемблере. Сегодня мы будем всячески управлять стандартными кнопками в заголовке окна. Это могут быть Minimize, Maximize, Help и Close, для каждой из них свои правила. Для начала, чтобы в заголовке окна появились кнопки, оно должно быть создано со стилями WS_CAPTION и WS_SYSMENU, этого достаточно, чтобы появилась кнопка Close. Кнопки Minimize и Maximize появляются при добавлении в стили окна хотя бы одного значения WS_MAXIMIZEBOX или WS_MINIMIZEBOX, причем они неразрывны как Ленин и Партия, в любом случае появятся обе, а комбинацией стилей только регулируется их активность. Для появления кнопки Help в расширенном стиле окна должно присутствовать значение WS_EX_CONTEXTHELP, причем кнопки Minimize/Maximize и кнопка Help взаимоисключающие, одновременно в заголовке окна они присутствовать не могут. Почему так сделано - непонятно.С теорией закончили, переходим к практике. В различных ситуациях может понадобиться отключение или включение определенных кнопок в заголовке окна. Как несложно догадаться, состояния кнопок Minimize, Maximize и Help регулируются манипуляциями со стилями окна:
Code (Assembler) : Убрать нумерацию
- .enable_min:
- ; Активировать кнопку Minimize
- invoke GetWindowLong,[hwnddlg],GWL_STYLE
- or eax,WS_MINIMIZEBOX
- invoke SetWindowLong,[hwnddlg],GWL_STYLE,eax
Code (Assembler) : Убрать нумерацию
- .disable_min:
- ; Отключить кнопку Minimize
- invoke GetWindowLong,[hwnddlg],GWL_STYLE
- and eax,not WS_MINIMIZEBOX
- invoke SetWindowLong,[hwnddlg],GWL_STYLE,eax
Code (Assembler) : Убрать нумерацию
- .enable_max:
- ; Активировать кнопку Maximize
- invoke GetWindowLong,[hwnddlg],GWL_STYLE
- or eax,WS_MAXIMIZEBOX
- invoke SetWindowLong,[hwnddlg],GWL_STYLE,eax
Code (Assembler) : Убрать нумерацию
- .disable_max:
- ; Отключить кнопку Maximize
- invoke GetWindowLong,[hwnddlg],GWL_STYLE
- and eax,not WS_MAXIMIZEBOX
- invoke SetWindowLong,[hwnddlg],GWL_STYLE,eax
При активации кнопки Help надо обязательно позаботиться, чтобы в заголовке окна не было вышеуказанных кнопок Minimize и Maximize.
Code (Assembler) : Убрать нумерацию
- .enable_help:
- ; Активировать кнопку Help
- invoke GetWindowLong,[hwnddlg],GWL_STYLE
- and eax,not (WS_MAXIMIZEBOX or WS_MINIMIZEBOX)
- invoke SetWindowLong,[hwnddlg],GWL_STYLE,eax
- invoke GetWindowLong,[hwnddlg],GWL_EXSTYLE
- or eax,WS_EX_CONTEXTHELP
- invoke SetWindowLong,[hwnddlg],GWL_EXSTYLE,eax
Code (Assembler) : Убрать нумерацию
- .disable_help:
- ; Отключить кнопку Help
- invoke GetWindowLong,[hwnddlg],GWL_EXSTYLE
- and eax,not WS_EX_CONTEXTHELP
- invoke SetWindowLong,[hwnddlg],GWL_EXSTYLE,eax
Code (Assembler) : Убрать нумерацию
- .enable_close:
- ; Активировать кнопку Close
- invoke GetSystemMenu,[hwnddlg],FALSE
- invoke EnableMenuItem,eax,SC_CLOSE,MF_BYCOMMAND or MF_ENABLED
Code (Assembler) : Убрать нумерацию
- .disable_close:
- ; Отключить кнопку Close
- invoke GetSystemMenu,[hwnddlg],FALSE
- invoke EnableMenuItem,eax,SC_CLOSE,\
- MF_BYCOMMAND or MF_DISABLED or MF_GRAYED
Просмотров: 1880 | Комментариев: 0
Внимание! Статья опубликована больше года назад, информация могла устареть!
Комментарии
Отзывы посетителей сайта о статье
Комментариeв нет
Добавить комментарий
Заполните форму для добавления комментария