C ++ WINAPI: перетаскивание родительской области клиента с затенением дочерних окон вкладок - PullRequest
1 голос
/ 17 октября 2010

Попытка симулировать перетаскивание окна на основе клиентской области путем возврата HTCAPTION под WM_NCHITTEST (исключая HTCLIENT и соответствующие области) работает безупречно при использовании с родительским окном - однако наличие дочерних окон, таких как окна-заполнители вкладок, даже если установлено расширенное окностиль WS_EX_TRANSPARENT, заставляет щелчки не передавать сообщения WM_NCHITTEST родительскому окну (и попытка обрабатывать локальные сообщения WM_NCHITEST аналогичным образом приводит к ожидаемому эффекту перетаскивания дочернего окна вокруг родителя, а не самого родителя).

Учитывая, что каждая область в этом дочернем окне вкладки, по-видимому, считается клиентской областью, обработка WM_LBUTTONDOWN вместо этого, кажется, производит желаемый эффект (см. Ниже):

    case WM_LBUTTONDOWN: {
        SendMessage(mainWnd.hWnd, WM_NCLBUTTONDOWN, HTCAPTION, lParam); 
    break;
    }

Где mainWnd.hWnd - это дескриптор родительского окна (hWnd - член разработанного класса помощника по свойствам окна)

Несмотря на то, что это дает желаемый эффект, я не совсем понимаю, действительно ли WS_EX_TRANSPARENT предназначен для того, чтобы позволить щелчкам проходить до нижележащегоwindows, а есть ли более подходящее решение?

1 Ответ

1 голос
/ 10 июня 2011

Вы пытались вернуть HTTRANSPARENT из WM_NCHITTEST для элемента управления вкладкой? Я думаю, что следует распространять сообщение в родительское окно.

WS_EX_TRANSPARENT имеет отношение к тому, как окно окрашивается в афаик.

...