日本艺术家奈良美智:VC对话框添加右键菜单
来源:百度文库 编辑:中财网 时间:2024/05/03 21:39:20
如:
void CExampleDlg::OnCut()
{
}
{
}void CExampleDlg::OnPaste()
{
}
{
}
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
在mousemove中使用
if(rect.PtInRect(point))
MessageBox("hi");
不起作用,即使鼠标落入有效区域。
--------------------------------------------------------------------------------
这个rect是怎样得来的。
要注意,鼠标操作都是屏幕坐标,即point是相对于屏幕左上角的偏移。
如果rect是设备坐标,则需要转换成屏幕坐标
--------------------------------------------------------------------------------
由此而来->GetWindowRect(&rect)
rect (top,bottom,left,right),观察rect运行数据,正常。
--------------------------------------------------------------------------------
以上代码测试成功
--------------------------------------------------------------------------------
GetWindowRect返回的是屏幕坐标
而mousemove里面获取的是对话框的相对坐标
因此要把鼠标的坐标转换位屏幕坐标,可以用ClientToScreen(&point)转换后,就可以实现你的目的了
--------------------------------------------------------------------------------
ScreenToClient
把屏幕坐标转换成客户区坐标
--------------------------------------------------------------------------------
3楼的方法试了,还是不行。
我的按钮是在图片上建立的,应该没有影响把
--------------------------------------------------------------------------------
对了忘了告诉你,如果你的那个控件是button
则需要先SetCapture,完后记得要ReleaseCapture.
如果区域不是按钮区域的话就不用SetCapture了!
--------------------------------------------------------------------------------
谢谢iyranly
可以了,但SetCapture太霸道了,结果是只有这一个功能可以用,其他功能都给屏蔽掉了。
看来,在什么位置放ReleaseCapture是个学问
--------------------------------------------------------------------------------
那个当然很霸道的
在mousemove最后一行释放掉就可以了
以下代码是在对话框的一个控件上,按右键弹出一菜单.
void CMenuDlg::OnContextMenu(CWnd* pWnd, CPoint point)
{
}