在对话框上拖动按钮并移动该按钮(改写CXXButton::PreTranslateMessage,然后MoveWindow)
Posted 朝闻道
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在对话框上拖动按钮并移动该按钮(改写CXXButton::PreTranslateMessage,然后MoveWindow)相关的知识,希望对你有一定的参考价值。
- // 派生自CButton类,主要过滤WM_LBUTTONDOWN 、WM_LBUTTONUP和WM_MOUSEMOVE消息。
- BOOL m_bFlag = FALSE; // 成员变量,用来标示鼠标是否按下, 初始化为FALSE
- CPoint m_pt; // 成员变量,用来保存当前坐标值
- BOOL CXXButton::PreTranslateMessage(MSG* pMsg)
- {
- // TODO: Add your specialized code here and/or call the base class
- switch(pMsg->message)
- {
- case WM_LBUTTONDOWN:
- {
- m_pt = pMsg->pt;
- m_bFlag = TRUE;
- }
- break;
- case WM_LBUTTONUP:
- {
- m_bFlag = FALSE;
- }
- break;
- case WM_MOUSEMOVE:
- {
- if(m_bFlag)
- {
- int cx = pMsg->pt.x - m_pt.x;
- int cy = pMsg->pt.y - m_pt.y;
- CRect rc;
- GetWindowRect(&rc);
- GetParent()->ScreenToClient(&rc);
- int nWidth = rc.Width();
- int nHeight = rc.Height();
- rc.left += cx;
- rc.top += cy;
- rc.right = rc.left + nWidth;
- rc.bottom = rc.top + nHeight;
- MoveWindow(rc);
- m_pt = pMsg->pt;
- }
- }
- break;
- default:
- break;
- }
- return CButton::PreTranslateMessage(pMsg);
- }
http://blog.csdn.net/visualeleven/article/details/7177775
以上是关于在对话框上拖动按钮并移动该按钮(改写CXXButton::PreTranslateMessage,然后MoveWindow)的主要内容,如果未能解决你的问题,请参考以下文章
LibGDX - InputProcessor - 如果用户将手指从代表在 X 上移动的按钮拖动到代表在 Y 上移动的按钮