QQ登录

只需一步,快速开始

上位机VC MFC通过派生实现无法点击的逃跑按钮

[ 复制链接 ]

上位机VC MFC通过派生实现无法点击的逃跑按钮

上位机VC MFC通过派生实现无法点击的逃跑按钮


请点击此处下载

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

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

文件名称:上位机VC MFC通过派生实现无法点击的逃跑按钮.rar 
文件大小:218.81 KB  售价:10金币
下载权限: 不限 以上或 VIP会员   [购买捐助会员]   [充值积分]   有问题联系我


  

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

  

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

  

QQ联系我

微信扫扫联系我

  

[iqiyi][/iqiyi]

例程通过从CButton类派生出自己的类 class CTraceBtn : public CButton
在类中编写OnMouseMove函数实现无法被鼠标点击到的按钮。
点击界面上的捕获开关,可以让按钮点击到与否。

实现过程:
新建对话框工程
从CButton派生类class CTraceBtn : public CButton。
添加成员变量与函数,与鼠标移动函数
  1. public:
  2.         void EnableCatch(bool Benalbe = true){m_bCatch = Benalbe;}
  3.         int m_nJumpDistance;
  4.         bool m_bCatch;
  5. void CTraceBtn::OnMouseMove(UINT nFlags, CPoint point)
  6. {
  7.         if(m_bCatch)
  8.                 return;
  9.    CWnd* pParent = GetParent();
  10.     if (!pParent) pParent = GetDesktopWindow();

  11.     CRect ParentRect;                                   // Parent client area (Parent coords)
  12.     pParent->GetClientRect(ParentRect);

  13.     ClientToScreen(&point);                             // Convert point to parent coords
  14.     pParent->ScreenToClient(&point);

  15.     CRect ButtonRect;                                   // Button Dimensions (Parent coords)
  16.     GetWindowRect(ButtonRect);  
  17.     pParent->ScreenToClient(ButtonRect);
  18.     CPoint Center = ButtonRect.CenterPoint();           // Center of button (parent coords)

  19.     CSize CriticalSize(ButtonRect.Width()/6, ButtonRect.Height()/6);


  20.     CRect NewButtonRect = ButtonRect;                    // New position (parent coords)

  21.     if (point.x - CriticalSize.cx > Center.x)            // Mouse is right of center
  22.     {
  23.         if (ButtonRect.left > ParentRect.left + ButtonRect.Width() + m_nJumpDistance)
  24.             NewButtonRect -= CSize(ButtonRect.right - point.x + m_nJumpDistance, 0);
  25.         else
  26.             NewButtonRect += CSize(point.x - ButtonRect.left + m_nJumpDistance, 0);
  27.     }
  28.     else if (point.x + CriticalSize.cx < Center.x)      // Mouse is left of center
  29.     {
  30.         if (ButtonRect.right < ParentRect.right - ButtonRect.Width() - m_nJumpDistance)
  31.             NewButtonRect += CSize(point.x - ButtonRect.left + m_nJumpDistance, 0);
  32.         else
  33.             NewButtonRect -= CSize(ButtonRect.right - point.x + m_nJumpDistance, 0);
  34.     }

  35.     if (point.y - CriticalSize.cy > Center.y)           // Mouse is below center
  36.     {
  37.         if (ButtonRect.top > ParentRect.top + ButtonRect.Height() + m_nJumpDistance)
  38.             NewButtonRect -= CSize(0, ButtonRect.bottom - point.y + m_nJumpDistance);
  39.         else
  40.             NewButtonRect += CSize(0, point.y - ButtonRect.top + m_nJumpDistance);
  41.     }
  42.     else if (point.y + CriticalSize.cy < Center.y)      // Mouse is above center
  43.     {
  44.         if (ButtonRect.bottom < ParentRect.bottom - ButtonRect.Height() - m_nJumpDistance)
  45.             NewButtonRect += CSize(0, point.y - ButtonRect.top + m_nJumpDistance);
  46.         else
  47.             NewButtonRect -= CSize(0, ButtonRect.bottom - point.y + m_nJumpDistance);
  48.     }

  49.     MoveWindow(NewButtonRect);
  50.     RedrawWindow();
  51.    
  52.         CButton::OnMouseMove(nFlags, point);
  53. }
复制代码


在界面上添加按钮控件,并使其关联变量CTraceBtn        m_TraceBtn;

再添加单选框,双击关联点击函数
  1. void CGkbc8Dlg::OnCheck1()
  2. {
  3.         static bool bCatch = false;
  4.         bCatch = !bCatch;
  5.         m_TraceBtn.EnableCatch(bCatch);
  6.         
  7.         ((CButton*)GetDlgItem(IDC_CHECK1))->SetCheck(bCatch);
  8. }
复制代码

回复

使用道具 举报

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