У меня есть Win32 HWND, и я хотел бы позволить пользователю удерживать элемент управления и левую кнопку мыши, чтобы перетащить окно по экрану. Учитывая (1), что я могу обнаружить, когда пользователь держит управление, левую кнопку мыши и перемещает мышь, и (2) у меня есть новая и старая позиция мыши, как я могу использовать API Win32 и мой HWND для изменения положение окна?
Как реализовать перетаскивание окна с помощью его клиентской области?
Ответ 1
Внедрить обработчик сообщений для WM_NCHITTEST. Вызовите DefWindowProc() и проверьте, является ли возвращаемое значение HTCLIENT. Верните значение HTCAPTION, если оно есть, в противном случае верните возвращаемое значение DefWindowProc. Теперь вы можете щелкнуть область клиента и перетащить окно, точно так же, как вы перетащили окно, щелкнув надпись.
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
switch (message)
{
case WM_NCHITTEST: {
LRESULT hit = DefWindowProc(hWnd, message, wParam, lParam);
if (hit == HTCLIENT) hit = HTCAPTION;
return hit;
}
// etc..
}