Как обработать событие перетаскивания в развернутом окне - PullRequest
1 голос
/ 22 января 2010

У меня есть приложение MFC, работающее в Win7 без Titlebar (т.е. моя строка заголовка домашнего приготовления, с пользовательскими кнопками для восстановления, разворачивания и закрытия). В Win7 он реагирует на событие максимизации, генерируемое Win 7 API, когда пользователь перетаскивает окно в верхнюю часть экрана. Тем не менее, после того, как оно развернуто, я не могу зафиксировать событие восстановления, которое происходит, когда пользователь перетаскивает окно сверху.

Я выполняю восстановление при двойном щелчке, я выполняю восстановление при нажатии кнопки восстановления, но перетаскивание не удается обнаружить.

Я бы предположил, что это будет выглядеть примерно так:

if (message == WM_WINDOWPOSCHANGING)
{
    // DETECT RESTORE MSG HERE.
}

Но, похоже, это не улавливает. Как будто где-то я отключил перемещение окна, когда оно развернуто.

Может быть, есть какой-то способ, которым я предотвращаю WM_RESIZE? Как мне обработать событие перетаскивания, чтобы включить автоматическое изменение размера?

Ответы [ 2 ]

1 голос
/ 22 января 2010

Вы пытались обработать сообщение WM_NCHITTEST , возвращающее HTCAPTION (заголовок), когда мышь находится над пользовательской строкой заголовка, что позволяет выполнять обычную обработку окон без дальнейшей настройки?

0 голосов
/ 22 января 2010

Я обнаружил, что, так как приложение не имеет Titlebar, win7 не обрабатывает перетаскивание окна и поэтому вообще не отправляет WM_SYSCOMMAND. Другими словами, приложение блокировало перетаскивание заголовка, потому что было нет заголовка перетаскивания.

Решение частично заключается в обнаружении перетаскивания нашего макета заголовка. После этого окно должно быть восстановлено только в РАЗМЕРЕ, а не в положении. Позиция должна быть динамической для курсора, как это делает Win7. Мысли, люди?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...