QQ登录

只需一步,快速开始

上位机MFC实现磁性窗口源代码

[ 复制链接 ]

上位机MFC实现磁性窗口源代码

上位机MFC实现磁性窗口源代码

当前代码实现带有磁性功能的窗口。
效果如上图,
可以点击显示/隐藏按钮,打开隐藏子窗体。
在停靠窗体周边拖动子窗体,可以看到子窗体有磁铁效果,
会吸附在停靠窗体上。
子窗体移动时,显示磁铁效果的关键代码

  1. // 定义两个域值
  2. #define THRESHOLD 1
  3. #define GAP 30
  4. void CDockDlg::Dock(UINT nDirection,CWnd *pWndMain)
  5. {
  6.         // 得到主窗体矩形区域
  7.         CRect rectMain;
  8.         pWndMain->GetWindowRect(&rectMain);

  9.         // 进行停靠操作
  10.         m_nDirection = nDirection;

  11.         if (nDirection == LEAVE)
  12.                 m_nDirection = NO_DIRECTION;

  13.         // 不再停靠
  14.         else if (!IsDocking(rectMain,m_rectWnd,nDirection))
  15.                 Dock(LEAVE,pWndMain);

  16.         int nSep;
  17.         switch (m_nDirection)
  18.         {
  19.         case LEFT:
  20.                 // 从左方停靠
  21.                 nSep = rectMain.left - m_rectWnd.right;
  22.                 if (abs(nSep) > THRESHOLD && abs(nSep) <= GAP)
  23.                 {
  24.                         m_rectWnd.OffsetRect(nSep,0);
  25.                         Dock(LEFT,pWndMain);
  26.                 }
  27.                 else if (abs(nSep) > GAP)
  28.                         Dock(LEAVE,pWndMain);
  29.                 break;
  30.         case RIGHT:
  31.                 // 从右边停靠
  32.                 nSep = rectMain.right - m_rectWnd.left;
  33.                 if (abs(nSep) > THRESHOLD && abs(nSep) <= GAP)
  34.                 {
  35.                         m_rectWnd.OffsetRect(nSep,0);
  36.                         Dock(RIGHT,pWndMain);
  37.                 }
  38.                 else if (abs(nSep) > GAP)
  39.                         Dock(LEAVE,pWndMain);
  40.                 break;
  41.         case TOP:
  42.                 // 从上边停靠
  43.                 nSep = rectMain.top - m_rectWnd.bottom;
  44.                 if (abs(nSep) > THRESHOLD && abs(nSep) <= GAP)
  45.                 {
  46.                         m_rectWnd.OffsetRect(0,nSep);
  47.                         Dock(TOP,pWndMain);
  48.                 }
  49.                 else if (abs(nSep) > GAP)
  50.                         Dock(LEAVE,pWndMain);
  51.                 break;
  52.         case BOTTOM:
  53.                 // 从下面停靠
  54.                 nSep = rectMain.bottom - m_rectWnd.top;
  55.                 if (abs(nSep) > THRESHOLD && abs(nSep) <= GAP)
  56.                 {
  57.                         m_rectWnd.OffsetRect(0,nSep);
  58.                         Dock(BOTTOM,pWndMain);
  59.                 }
  60.                 else if (abs(nSep) > GAP)
  61.                         Dock(LEAVE,pWndMain);
  62.                 break;
  63.         case NO_DIRECTION:
  64.                 // 子窗体未停靠
  65.                 break;
  66.         case LEAVE:
  67.                 // 不再是停靠状态
  68.                 m_nDirection = NO_DIRECTION;
  69.         }
  70. }
复制代码
源代码下载地址:
请点击此处下载

请先注册会员后在进行下载

已注册会员,请先登录后下载

文件名称:上位机MFC实现磁性窗口源代码.rar 
文件大小:31.25 KB  售价:1金币
下载权限: 不限 以上或 VIP会员   [购买捐助会员]   [充值积分]   有问题联系我


  

上位机VC MFC程序开发精典实例大全源码与视频讲解配套下载408例

  

经历1年的编程与录制点击进入查看


  

halcon从自学到接项目视频教程,另外再赠送全网最全资源  

  

欢迎围观我录制的一套halcon自学视频教程(进入)


  

如果您认可,可联系功能定制!

  

如果您着急,充值会员可直接联系发您资料!

  

QQ联系我

微信扫扫联系我

  


回复

使用道具 举报

快速回复 返回列表 客服中心 搜索