弄了个程序,想在鼠标在某个按钮上按下的时候记录一下位置,
抬起的时候记录一下位置,跟一个按钮位置比较,得出用户抬起
时是在按钮的哪个方向。结果搞了半天没弄出来,头都大了。
搞不明白这里面的坐标都是怎么回事了。先后用到以下函数m_Button.GetClientRect(&rect);
m_Button.GetWindowRect(&rect);
OnLButtonUp(UINT nFlags,CPoint point);
ClientToWindow()
GetCursorPos()搞不清这几个函数返回的坐标是怎么回事了。一片混乱函数大概是如下这样,哪里出了问题呢?:
void CTestDlg::OnLButtonUp(UINT nFlags, CPoint point)
{
int nClickType=CLICK_NOT;
CRect rect;
if(m_bPressInButton)
{
m_Button.GetWindowRect(&rect);
POINT pt;
GetCursorPos(&pt);
if(pt.x<rect.left)
nClickType=CLICK_LEFT;
else if(pt.x>rect.right)
nClickType=CLICK_RIGHT;
else
nClickType=CLICK_CENTER;
}
m_bPressInButton=false;
CDialog::OnLButtonDown(nFlags,pt);
}
void CTestDlg::OnLButtonDown(UINT nFlags, CPoint point)
{
CRect rect;
m_Button.GetWindowRect(&rect); POINT pt;
GetCursorPos(&pt); if(pt.x>=rect.left && pt.x<=rect.right && pt.y>=rect.top && pt.y<=rect.bottom)
m_bInButton=true;
else
m_bInButton=false; CDialog::OnLButtonDown(nFlags,point);
}
抬起的时候记录一下位置,跟一个按钮位置比较,得出用户抬起
时是在按钮的哪个方向。结果搞了半天没弄出来,头都大了。
搞不明白这里面的坐标都是怎么回事了。先后用到以下函数m_Button.GetClientRect(&rect);
m_Button.GetWindowRect(&rect);
OnLButtonUp(UINT nFlags,CPoint point);
ClientToWindow()
GetCursorPos()搞不清这几个函数返回的坐标是怎么回事了。一片混乱函数大概是如下这样,哪里出了问题呢?:
void CTestDlg::OnLButtonUp(UINT nFlags, CPoint point)
{
int nClickType=CLICK_NOT;
CRect rect;
if(m_bPressInButton)
{
m_Button.GetWindowRect(&rect);
POINT pt;
GetCursorPos(&pt);
if(pt.x<rect.left)
nClickType=CLICK_LEFT;
else if(pt.x>rect.right)
nClickType=CLICK_RIGHT;
else
nClickType=CLICK_CENTER;
}
m_bPressInButton=false;
CDialog::OnLButtonDown(nFlags,pt);
}
void CTestDlg::OnLButtonDown(UINT nFlags, CPoint point)
{
CRect rect;
m_Button.GetWindowRect(&rect); POINT pt;
GetCursorPos(&pt); if(pt.x>=rect.left && pt.x<=rect.right && pt.y>=rect.top && pt.y<=rect.bottom)
m_bInButton=true;
else
m_bInButton=false; CDialog::OnLButtonDown(nFlags,point);
}
解决方案 »
- VC/c++模态对话框如何得到捕获鼠标单击对话框的事件
- 在OnInitDialog里面初始化对话框上的控件出错!!!
- VC中如何重命名文件夹?文件夹下还有文件...
- 多文档切换时总是新建菜单导致程序死?请高手指点
- update任何一个view都会出错,请问是什么原因?
- 如何根据已知的任意两点坐标,连成一线段后,给这线段加上一个箭头,箭头的方向随线的方向走.
- 那位兄弟知道哪有下agilent advisor lan ?
- 急急!在CMPP2.0中免提短信如何设定?立刻给分。
- 如何把一个BUTTON加到VIEW中去?
- windows 下磁盘I/O读写
- 在一个对话框里面加入了一个CStatic,如何将CStatic全屏显示?
- 请教关于Winpcap的问题
BOOL CTestDlg::PreTranslateMessage(MSG* pMsg)
{
if (pMsg->message == WM_LBUTTONDOWN)
{
//...
}
else if (pMsg->message == WM_LBUTTONUP)
{
//...
}
return CDialog::PreTranslateMessage(pMsg);
}
这个里面来实现你的事件都没有触发 你怎么会得到你想要的结果呢,楼主设置端点跟踪。
派生了个类,里面处理了WM_LBUTTONDOWN and UP
主要就是判断点和按钮位置的关系有问题
BOOL CNewButton::PreTranslateMessage(MSG* pMsg)
{
if(pMsg->message==WM_LBUTTONDOWN||pMsg->message==WM_LBUTTONUP)
{
if(m_hDlgHWND)
::SendMessage(m_hDlgHWND,pMsg->message,pMsg->wParam,pMsg->lParam);
}
return FALSE;
}