首页 > 其他 > 详细

MFC可拖动按钮

时间:2014-02-12 19:54:10      阅读:410      评论:0      收藏:0      [点我收藏+]

参考:http://download.csdn.net/download/zhuyf87/6859133

想要实现一个可拖动的按钮,就像拖动标题栏一样拖动主窗口(按钮父窗口)。

记录鼠标状态是否是按下,如果是则在鼠标移动的同时向父窗口发送WM_NCLBUTTONDOWN消息。可是却发现鼠标只能响应拖动消息,却不能响应按下消息。

通过参考上面的实例程序,发现需要在响应拖动函数中调用系统API :

ReleaseCapture();

 

这样的效果是按钮响应拖动之后会忽略点击消息,如果想在拖动之前先出现点击效果可以在ReleaseCapture()之前向自身发送WM_LBUTTONUP消息。

 

关键代码:

bubuko.com,布布扣
virtual LRESULT WindowProc(UINT nMsg, WPARAM wParam, LPARAM lParam)
{
    switch(nMsg){
    case WM_LBUTTONDOWN:
        m_bMouseDown = true;
        break;
    case WM_LBUTTONUP:
        m_bMouseDown = false;
        break;
    case WM_MOUSEMOVE:
        if(m_bMouseDown){
            SendMessage(WM_LBUTTONUP,wParam, lParam);
            ReleaseCapture();
            POINT pt = {GET_X_LPARAM(lParam), GET_Y_LPARAM(lParam)};
            ClientToScreen(&pt);
            ::PostMessage(GetTopWnd(),WM_NCLBUTTONDOWN, HTCAPTION, MAKELONG(pt.x, pt.y));
        }
        break;
        
    }
    return __super::WindowProc(nMsg, wParam, lParam);;
}
bubuko.com,布布扣

MFC可拖动按钮

原文:http://www.cnblogs.com/aishangxue/p/3545672.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!