
然后,WM_MOUSEMOVE,可以知道鼠标在移动。
按下(WM_LBUTTONDOWN)的时候判断是不是在主动滑块内,如果是,记下鼠标的位置和滑块的位置,并将一个成员变量(标志位)设置为true,
在WM_MOUSEMOVE里检查标志位,如果是true,那么将当前鼠标的位置减去按下时鼠标的位置可以知道鼠标的移动距离,把按下时滑块的位置加上这个移动距离就知道滑块应该被拖到什么位置上。
然后松开的时候把标志位设置为false即可。
假设你的button在对话框上,button的id为IDC_BUTTON实现步骤为:为对话框添加鼠标移动的消息处理OnMouseMove
如下:
void CDLGTestDlg::OnMouseMove(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
CWnd* pButton = GetDlgItem(IDC_BUTTON) // 获取button的指针
CRect rect
pButton->GetWindowRect(rect) // 获取button的矩形范围,该范围以显式屏幕坐标为基准
ScreenToClient(rect) // 将屏幕坐标为基准的矩形范围转化为以对话框客户区为基准的范围
// 鼠标如果落在矩形范围中,显示button
if( point.x>rect.left &&point.x<rect.right &&point.y>rect.top &&point.y<rect.bottom )
pButton->ShowWindow(SW_SHOW)
CDialog::OnMouseMove(nFlags, point)
}
如果你的button不是位于对话框上,而是在view或者其他界面上。
那么你创建这个button时一定保存了button的对象或者指针
然后你可以通过这个对象或指针调用GetWindowRect,重复上面的步骤即可
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)