Как мне реализовать перетаскивание окна, используя его клиентскую область? - PullRequest
13 голосов
/ 15 октября 2011

У меня Win32 HWND, и я бы хотел, чтобы пользователь удерживал управление и левую кнопку мыши, чтобы перетаскивать окно по экрану. Учитывая (1), что я могу определить, когда пользователь удерживает управление, левую кнопку мыши и перемещает мышь, и (2) у меня есть новая и старая позиции мыши, как я могу использовать Win32 API и мой HWND для изменения положение окна?

1 Ответ

33 голосов
/ 15 октября 2011

Реализация обработчика сообщений для 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..
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...