block Move Widget
От: arfaa  
Дата: 30.11.18 12:02
Оценка:
Добрый день,коллеги программисты!
Подскажите пожалуйста, имеется окно, которое таскается за любую часть, мне нужно запретить перетаскивать окно, к примеру, если курсор по y > 20,то есть таскать я должен уметь только за верхнюю часть. Как это реализовать, не могу понять и разобраться
Re: block Move Widget
От: Evgeniy Skvortsov Россия  
Дата: 30.11.18 12:25
Оценка: +2
Здравствуйте, arfaa, Вы писали:

A>Добрый день,коллеги программисты!

A>Подскажите пожалуйста, имеется окно, которое таскается за любую часть, мне нужно запретить перетаскивать окно, к примеру, если курсор по y > 20,то есть таскать я должен уметь только за верхнюю часть. Как это реализовать, не могу понять и разобраться

Насколько я помню, такая фишка (таскание окна за любую часть) реализуется как обработка сообщения WM_NCHITTEST и возврат HTCAPTION, то есть что бы винда думала, что клик происходит на заголовке.
Ну соответственно, в обработчике проверяй ограничения для Y и возвращай HT_CAPTION только когда нужно, в противном случае результат DefWindowProc

Координаты x и y получаются так:
xPos = GET_X_LPARAM(lParam); 
yPos = GET_Y_LPARAM(lParam);
Отредактировано 30.11.2018 12:33 Evgeniy Skvortsov . Предыдущая версия . Еще …
Отредактировано 30.11.2018 12:32 Evgeniy Skvortsov . Предыдущая версия .
Re: block Move Widget
От: Carc Россия https://vk.com/gosha_mazov
Дата: 30.11.18 12:53
Оценка: -2
Здравствуйте, arfaa, Вы писали:

A>Добрый день,коллеги программисты!

A>, мне нужно запретить перетаскивать окно, к примеру, если курсор по y > 20,то есть таскать я должен уметь только за верхнюю часть. Как это реализовать, не могу понять и разобраться
Обрабатывать сообщение WM_WINDOWPOSCHANGING, и в случае если вышло за границы изменять координаты в WINDOWPOS (указатель будет в LPARAM).

Если нужно только X,Y координаты окна менять, то можно посмотреть в сторону сообщения WM_GETMINMAXINFO
Aml Pages Home
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.