C ++ WINAPI:使用隐藏的子选项卡窗口拖动客户区域父级

时间:2010-10-17 12:37:37

标签: c++ winapi draggable sendmessage

尝试通过在WM_NCHITTEST(不包括HTCLIENT和适当的区域)下返回HTCAPTION来模拟基于客户区的窗口拖动,当与父窗口一起使用时可以完美地工作 - 但是存在子窗口,例如制表符占位符窗口,即使设置为扩展样式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是否实际上是允许点击传递到底层窗口,以及是否有更合适的解决方案感到困惑?

1 个答案:

答案 0 :(得分:1)

您是否尝试从WM_NCHITTEST返回HTTRANSPARENT以进行选项卡控件?我认为应该将消息传播到父窗口。

WS_EX_TRANSPARENT与窗口的绘制方式有关。