18.04.2007, 20:34
общий
это ответ
Здравствуйте, Chip!
Для того чтобы при нажтии на Enter нажималась какая-либо кнопка, необходимо чтобы эта кнопка имела фокус ввода. Кнопка может быть поумолчанию, но без фокуса ввода, тогда Enter не "нажмет" ее.
Возможны несколько вариантов.
1. При создании диалога из ресурса удобнее поступить следующим образом:
вместо простой кнопки пишем:
DEFPUSHBUTTON текст, id, x, y, ширина, высота [, стиль [, расширенный_стиль]]
параметры, полагаю, и без меня понятны.
ВАЖНО! При этом кнопка будет по умолчанию (с дополнительным бордюром) и с фокусом (при старте диалога). НО если фокус потеряется у кнопки, И фокус НЕ будет принадлежать ДРУГОЙ КНОПКЕ, то все равно Enter "нажмет" ее, иначе, если фокус у другой кнопки, нажмется эта кнопка - с новым фокусом.
2. Для не-диалога нужно вручную установить фокус ввода на нужную кнопку, здесь даже поумолчанию кнопка не поможет (елси даже фокус где-то - не на другой кнопке):
invoke SetFocus,hNewPushButton ;(masm)
где hNewPushButton - хэндл кнопки.
А чтобы сделать бордюрчик как у кнопки по умолчанию, можно либо, как было сказано ранее, при создании кнопки указать атрибут BS_DEFPUSHBUTTON, а можно динамически назначить:
invoke GetWindowLong,hNewPushButton,GWL_STYLE ;получаем стиль кнопки
or eax,BS_DEFPUSHBUTTON ;задаем атрибут кнопки по умолчанию
invoke SetWindowLong,hNewPushButton,GWL_STYLE,eax ;устанавливаем атрибут
Вот основные моменты.