尝试通过在 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 是否实际上是为了允许点击传递到底层窗口以及是否有更合适的解决方案感到困惑?