zoukankan      html  css  js  c++  java
  • MFC-拖动无边框窗体

    内容转载自https://www.bilibili.com/video/BV1AT4y137gS?p=35

    hpp    
    
    //定义全局变量
    BOOL m_bMoving;
    CPoint m_ptMouse;
    
    
    cpp
    
    CMFCApplication11Dlg::CMFCApplication11Dlg(CWnd* pParent /*=NULL*/)
        : CDialogEx(CMFCApplication11Dlg::IDD, pParent)
    {
        m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
    
        //在此处初始化
        m_ptMouse.x = m_ptMouse.y = 0;
        m_bMoving = FALSE;
    }
    
    
    
    /*
        鼠标左键按下消息
    */
    void CMFCApplication11Dlg::OnLButtonDown(UINT nFlags, CPoint point)
    {
        // TODO:  在此添加消息处理程序代码和/或调用默认值
    
        m_bMoving = TRUE;
        SetCapture();//捕获鼠标
        m_ptMouse = point;
    
    
        CDialogEx::OnLButtonDown(nFlags, point);
    }
    
    
    /*
        鼠标移动消息
    */
    void CMFCApplication11Dlg::OnMouseMove(UINT nFlags, CPoint point)
    {
        // TODO:  在此添加消息处理程序代码和/或调用默认值
    
        if (m_bMoving)
        {
            //计算鼠标移动的距离
            int x, y;
            x = point.x - m_ptMouse.x;
            y = point.y - m_ptMouse.y;
    
            if (abs(x) >= 2 || abs(y) >= 2)//控制移动大于两个像素在移动,避免连续移动的闪烁感
            {
                //获取窗口原来的位置
                RECT rc = { 0 };
                GetWindowRect(&rc);
    
                OffsetRect(&rc, x, y);//偏移矩形的位置
                MoveWindow(&rc, TRUE);//移动窗口
            }
    
        }
    
        CDialogEx::OnMouseMove(nFlags, point);
    }
    
    
    /*
        鼠标抬起消息
    */
    void CMFCApplication11Dlg::OnLButtonUp(UINT nFlags, CPoint point)
    {
        // TODO:  在此添加消息处理程序代码和/或调用默认值
    
        if (m_bMoving)
        {
            m_bMoving = FALSE;
            ReleaseCapture();//释放鼠标的捕获
        }
    
        CDialogEx::OnLButtonUp(nFlags, point);
    }
    
    
    /*
        窗口激活消息
    */
    void CMFCApplication11Dlg::OnActivate(UINT nState, CWnd* pWndOther, BOOL bMinimized)
    {
        CDialogEx::OnActivate(nState, pWndOther, bMinimized);
    
        // TODO:  在此处添加消息处理程序代码
    
        //窗口失去焦点,由激活状态,变为不激活状态
        if (nState == WA_INACTIVE && m_bMoving)
        {
            m_bMoving = FALSE;
            ReleaseCapture();//释放鼠标的捕获
        }
    }
  • 相关阅读:
    搜刮一些开源项目的APP
    iOS Crash文件的解析
    iOS中RGB颜色转换
    随笔杂记
    iOS字体
    方法总结
    经验点滴
    个人理解
    OC 知识点回顾
    IOS UI 笔记整理回顾
  • 原文地址:https://www.cnblogs.com/nxopen2018/p/14000474.html
Copyright © 2011-2022 走看看