Перетаскивание окна за любое место

Перетаскивание окна за любое место, а не только за заголовок, реализуется очень просто, но смотрится очень эффектно. Тем более, что окно может быть вообще без заголовка. Для этого в обработчик окна надо добавить следующий код.
; Процедура обработчика окна
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 необходим для освобождения окна от захвата сообщений мыши. Даже если вы сами не устанавливали эти перехватчики, то они вполне могут быть установлены сторонними программами. В этом случае окно может перемещаться неправильно. Исходник с откомпилированным файлом прилагается.
Теги:
окно, Windows
Добавлено: 10 Апреля 2018 20:48:11 Добавил: Андрей Ковальчук Нравится 0
Добавить
Комментарии:
Нету комментариев для вывода...