Запуск событий мыши на статических элементах управления - PullRequest
1 голос
/ 25 ноября 2010

Как я могу вызвать событие перетаскивания мыши на статическом элементе управления?


Редактировать:

Так работает подкласс?Тогда как я могу добавить новые сообщения в класс окна (щелчок мыши и т. Д.)?

WNDPROC wpOrigKnobProc;

LRESULT CALLBACK wpKnobProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) {
    switch (uMsg) {
        // So here I can receive custom messages for the control?
    }
    return CallWindowProc(wpOrigKnobProc, hwnd, uMsg, wParam, lParam);
}

LRESULT CALLBACK WndProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) {
    switch (uMsg) {
        case WM_CREATE:
            {
                HWND hctl = CreateWindowEx(0, "STATIC", NULL, SS_CENTERIMAGE | SS_REALSIZEIMAGE | SS_BITMAP | WS_CHILD | WS_VISIBLE, 90, 10, 64, 64, hwnd, (HMENU) KNOB, GetModuleHandle(NULL), 0);
                wpOrigKnobProc = (WNDPROC) SetWindowLong(hctl, GWL_WNDPROC, (LONG) wpKnobProc);
            }
            return 0;
    }
    return DefWindowProc(hwnd, uMsg, wParam, lParam);
}

Спасибо!

Ответы [ 3 ]

1 голос
/ 25 ноября 2010

Нет события перетаскивания мышью. Вам придется подкласс управления. Запишите положение мыши в обработчике сообщений WM_LBUTTONDOWN и захватите мышь. Затем сравните его с текущей позицией мыши в обработчике сообщений WM_MOUSEMOVE. Если кнопка все еще нажата, а расстояние больше, чем у GetSystemMetrics, SM_CXDOUBLECLK и SM_CYDOUBLECLK, тогда вы создадите событие перетаскивания мышью.

0 голосов
/ 14 ноября 2013

Если вы создаете простой статический элемент управления без каких-либо флагов SS_*, вам, вероятно, потребуется обработать WM_NCHITTEST в вашем wndproc и вернуть HTCLIENT, в противном случае вы не получите WM_MOUSExxx или WM_LBUTTONи др. сообщения.

0 голосов
/ 26 ноября 2010

Я бы посоветовал вам взглянуть на WTL: CContainedWindow очень удобен для SubclassWindow.Подклассификация вручную очень грязная, но с WTL это не так уж и сложно.Короче говоря, он позволяет вам установить собственный оконный процесс, который обрабатывает оконные сообщения, которые окна отправляют элементам управления.

Вот одно из лучших руководств для начинающих: http://www.codeproject.com/KB/wtl/wtl4mfc4.aspx#atl2

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