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();//释放鼠标的捕获 } }
MFC-拖动无边框窗体
转载本文章为转载内容,我们尊重原作者对文章享有的著作权。如有内容错误或侵权问题,欢迎原作者联系我们进行内容更正或删除文章。
提问和评论都可以,用心的回复会被更多人看到
评论
发布评论
相关文章
-
有趣的css - 边框动效按钮
交互感比较强的一个动效按钮。
动效设计 交互设计 ux/ui 动效按钮 css -
WPF 无边框窗体 缩放窗体
WPF 无边框 窗口 拖拽 缩放
WPF 无边框窗体 拖拽缩放 最大最小化 C# -
WPF创建无边框窗体
WPF自带的窗体边框和标题栏只包含基础的功能,无法满足项目的视觉效果,经常会遇到需要去掉框架自带标题栏的情况。(注意:当窗
wpf c# windowchrome 标题栏 无边框 -
WPF中制作无边框窗体
众所周知,在WinForm中,如果要制作一个无边框窗体,可以将窗体的FormBorderStyle属性设置为None来完成。如果要
wpf button setter winform object -
拖动无边框窗体
实现效果: 知识运用: API中的两个函数 ReleaseCapture和SendMessage 实现代码:
sed windows消息 编程