首页 > 代码库 > 在对话框上拖动按钮并移动该按钮(改写CXXButton::PreTranslateMessage,然后MoveWindow)

在对话框上拖动按钮并移动该按钮(改写CXXButton::PreTranslateMessage,然后MoveWindow)

 

[cpp] view plain copy
 
  1. // 派生自CButton类,主要过滤WM_LBUTTONDOWN 、WM_LBUTTONUP和WM_MOUSEMOVE消息。  
  2.   
  3. BOOL m_bFlag = FALSE; // 成员变量,用来标示鼠标是否按下, 初始化为FALSE  
  4. CPoint m_pt; // 成员变量,用来保存当前坐标值  
  5.   
  6. BOOL CXXButton::PreTranslateMessage(MSG* pMsg)   
  7. {  
  8.     // TODO: Add your specialized code here and/or call the base class  
  9.     switch(pMsg->message)  
  10.     {  
  11.     case WM_LBUTTONDOWN:  
  12.         {  
  13.             m_pt = pMsg->pt;  
  14.             m_bFlag = TRUE;  
  15.         }  
  16.         break;  
  17.   
  18.     case WM_LBUTTONUP:  
  19.         {  
  20.             m_bFlag = FALSE;  
  21.         }  
  22.         break;  
  23.   
  24.     case WM_MOUSEMOVE:  
  25.         {  
  26.             if(m_bFlag)  
  27.             {  
  28.                 int cx = pMsg->pt.x - m_pt.x;  
  29.                 int cy = pMsg->pt.y - m_pt.y;  
  30.   
  31.                 CRect rc;  
  32.                 GetWindowRect(&rc);  
  33.                 GetParent()->ScreenToClient(&rc);  
  34.                 int nWidth = rc.Width();  
  35.                 int nHeight = rc.Height();  
  36.   
  37.                 rc.left += cx;  
  38.                 rc.top += cy;  
  39.                 rc.right = rc.left + nWidth;  
  40.                 rc.bottom = rc.top + nHeight;  
  41.   
  42.                 MoveWindow(rc);  
  43.   
  44.                 m_pt = pMsg->pt;  
  45.             }  
  46.         }  
  47.         break;  
  48.   
  49.     default:  
  50.         break;  
  51.     }  
  52.     return CButton::PreTranslateMessage(pMsg);  
  53. }  
http://blog.csdn.net/visualeleven/article/details/7177775

 

在对话框上拖动按钮并移动该按钮(改写CXXButton::PreTranslateMessage,然后MoveWindow)