一个关于鼠标移动响应相应消息的问题
大家好,我现在碰到这样一个问题,就是我的鼠标移动到按钮上,判断鼠标当前点在按钮这个区域,然后这个按钮就成为焦点.这两步我都没实现的太理想
1.我通过GetDlgItem(ID_BUTTON)-> GetClientRect(&rect)来获得按钮的区域大小,然后用区域的Prtin函数来判断当前点是否在这个区域中,但是我在OnMove中就是相应不了,感觉应该是这个区域始终都不是按钮的区域,然后我又试了ScreentoClient也还是不好使,请高手指点按钮区域如何来获得?
2.成为焦点这个也是,GetDlgItem(ID_BUTTON)-> SetFocus();也不好使,没有使这个按钮成为焦点,还需要加什么别的语句吗??
[解决办法]
GetDlgItem(ID_BUTTON)-> GetWindowRect(&rect)试试,这个获得的是屏幕坐标。
[解决办法]
你缺少了窗体位子,窗体位子+按钮位子就应该是真正的按钮位子
[解决办法]
你的意思是说,鼠标移动到哪个按钮上哪个按钮拥有焦点吗? [所有相关帖子]
CRgn rgn;
rgn.CreateRectRgn(10,20,20,40);
BOOL iFlagIn;
void CEnglishBabyView::OnMouseMove(UINT nFlags, CPoint point)
{
iFlagIn=rgn.PtInRegion(point.x,point.y);
if(iFlagIn==TRUE)
{
GetDlgItem(ID_BUTTON)-> SetFocus();
}
}
BOOL CTestdlgDlg::OnInitDialog()
{
GetDlgItem(IDC_BUTTON1)-> SetFocus();
return FALSE; // return TRUE unless you set the focus to a control
}
在这个函数中默认的是返回TRUE;
你让它返回FALSE;就可以了.
我在VC知识库里给你发贴了,你去看看
[解决办法]
设置焦点的时候一定要返回FALSE!!!!
还有就是第一个问题可能是你的坐标不一致吧!
先转成在同一个坐标系下吧~!
[解决办法]
你在对话框中响应鼠标消息吧,事实上按钮有自己的消息处理函数,鼠标消息不会转给对话框。要处理按钮的鼠标消息,应该重载按钮类(CButton)来处理。不过我看你说的都是按钮的默认行为啊,点击、获得焦点,并不需要自己处理。
[解决办法]
可以这样子,另一种思路:
可以新建一个从CButton派生的类CMyButton,
在类CMyButton里面添加一个消息响应函数OnMouseMove();
void CMyButton::OnMouseMove(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
this-> SetFocus();
CButton::OnMouseMove(nFlags, point);
}
然后将那个按纽与这个类关联起来
就可以了 鼠标移动到这个按纽上 按纽就得到焦点了