Перетаскивание окна за любое место
Перетаскивание окна за любое место, а не только за заголовок, реализуется очень просто, но смотрится очень эффектно. Тем более, что окно может быть вообще без заголовка. Для этого в обработчик окна надо добавить следующий код.
; Процедура обработчика окна
proc DialogProc hwnddlg,msg,wparam,lparam
......
; Нажата левая кнопка мышки на окне?
cmp [msg], WM_LBUTTONDOWN
je drag_window
......
drag_window:
; Освободить захват мыши окном в текущем потоке и
; восстановить обычную обработку ввода данных от мыши
invoke ReleaseCapture
; Перенаправить сообщение передвижения мышью SC_MOVE на заголовок окна
; 61458 = SC_MOVE or HTCAPTION, в FASM по умолчанию не определено,
; поэтому сразу задается числовым значением
invoke SendMessage,[hwnddlg],WM_SYSCOMMAND,61458,0
......
Вызов функции
ReleaseCapture необходим для освобождения окна от захвата сообщений мыши. Даже если вы сами не устанавливали эти перехватчики, то они вполне могут быть установлены сторонними программами. В этом случае окно может перемещаться неправильно. Исходник с откомпилированным файлом прилагается.
Комментарии:
Нету комментариев для вывода...