duiLib 实现鼠标拖动状态栏时,窗口跟着拖动

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.

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