1、布局文件,窗口需设置可拖动的标题栏区域:

2、HandleMessage函数中,处理WM_LBUTTONDOWN消息,判断鼠标在标题栏,让系统处理窗口移动。代码片段如下:
cpp
else if (uMsg == WM_LBUTTONDOWN) {
// 获取鼠标点击坐标
POINT pt = { GET_X_LPARAM(lParam), GET_Y_LPARAM(lParam) };
//ScreenToClient(m_hWnd, &pt); // 已经是客户区坐标了,不需要这一步转换
// 找到标题栏控件
CControlUI* pTitleBar = m_pm.FindControl(_T("title_bar"));
if (pTitleBar) {
// 判断鼠标点击是否在标题栏控件范围内
RECT rcTitle = pTitleBar->GetPos();
if (PtInRect(&rcTitle, pt)) {
// 发送消息让系统处理窗口移动
::SendMessage(m_hWnd, WM_SYSCOMMAND, SC_MOVE | HTCAPTION, 0);
return 0;
}
}
}
运行, 鼠标点击拖动窗口标题栏时, 窗口也跟着被拖动。测试ok.

但是发现,点击标题栏按钮不响应了,估计是事件冲突了,后面再研究下。