Задать область для перемещения окна
Задача простая:
Создано окно с флагом "
Popup"Нужно задать область, для перемещения этого окна
С помощью SetWindowPos не хочу этого делать, обработчик событий окна не хочу трогать вообще
Придумал как можно это сделать - с помощью WindowMove, отслеживание нахождения курсора мыши в нужной области окна и при нажатии лкм, передвигать окно, в принципе хороший вариант, но не могу сделать корректное перемещении окна, оно "прыгает" жестко.
if (GetAsyncKeyState(VK_LBUTTON) == -32768)
{
if (isInBoxLocal(x, y, width, height) || bMove == true)
{
bMove = true;
pCustomWindow->moveWindow
(
pCustomWindow->getMousePosGlobal().x,
pCustomWindow->getMousePosGlobal().y
);
}
}
else
{
bMove = false;
}
Собственно вопрос, не "кодил" уже много лет, решит возобновить, пока не "кодил", вышли несколько стандартов с++, может быть есть какая-то функция для этого дела специальная, чтобы не выдумывать велосипед? (Что - то типа SetAreaMoveable(x,y,width,height) -) )
UPD:
Нашел такой вариант - SendMessage(pCustomWindow->getHWND(), WM_SYSCOMMAND, SC_MOVE | HTCAPTION, 0);
Работает идеально, но если окно заезжает за области рабочего окна, область окна не обновляется, WindowUpdate не помогает...
Ответы (1 шт):
Для этого необходимо написать обработку события WM_WINDOWPOSCHANGING. В lparam будет содержаться указатель на структуру WINDOWPOS, изменяя которую можно контролировать размер и положение окна до того, как эти изменения применятся.