请问各位高人,在对话框的Mschart控件上创建右键弹出菜单怎么实现 可以在PreTranslateMessage里面截获鼠标消息,再判断控件是不是焦点控件 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 可以在窗口的右键事件中判断鼠标点击的点,是否在Mschart的控件范围之内,如果在,就弹出菜单,如果不在,则不弹出。PtInRect( POINT point ) 是判断点是否在矩形中。CRect rect;m_ctMsChart.GetClientRect(&rect);//假如:m_ctMsChart是Mschart的名称。这个是得到rect的范围的。rect.PtInRect(point)判断是否为真,如果为真,弹出。 哪位帮我看一下,这么编为什么不弹出来.我在对话框的三个Mschart控件上点右键时都能弹出右键菜单void CdblView::OnRButtonDown(UINT nFlags, CPoint point){ // TODO: 在此添加消息处理程序代码和/或调用默认值 CPoint pt; GetCursorPos(&pt);//获取光标点击的位置 //pt=MAKEPOINTS(); ScreenToClient(&pt); CRect Arect,Prect,Vrect; m_chartA.GetClientRect(&Arect);//获取MSCHART1(m_chartA/p/v是关联的控件类型成员变量)控件的矩形区域 m_chartP.GetClientRect(&Prect); m_chartV.GetClientRect(&Vrect);if(Arect.PtInRect(pt)|Prect.PtInRect(pt)|Vrect.PtInRect(pt)){ CMenu menu;//创建加载一个菜单资源 menu.LoadMenu(IDR_MENU1); CMenu *pPopup=menu.GetSubMenu(0); //ClintToScreen(&pt); pPopup->TrackPopupMenu(TPM_LEFTALIGN,point.x,point.y,GetParent()); //弹出右键菜单 CFormView::OnRButtonDown(nFlags, point);}} 1)m_chartA、m_chartP、m_chartV是同一个东西吗?如果是,则使用一个就可以2)void CdblView::OnRButtonDown(UINT nFlags, CPoint point) 这个point,就是鼠标点击的位置。 if(Arect.PtInRect(pt) ¦Prect.PtInRect(pt) ¦Vrect.PtInRect(pt)) 改成if (Arect.PtInRect(point)||Prect.PtInRect(point)||Vrect.PtInRect(point)) -------废代码---------CPoint pt; GetCursorPos(&pt);//获取光标点击的位置 //pt=MAKEPOINTS(); ScreenToClient(&pt); m_chartA、m_chartP、m_chartV是对话框上三个不同ID的MSCHART控件关联的控件变量.TO:LIUXIUK 我试了一下, IF();是我改过来后在对话框上能弹出来, 不过感觉好像是整个对话框,而不是只能在这三个控件上弹出来的 我是想按着shanhqk说的来实现的. 把CPoint pt; GetCursorPos(&pt);//获取光标点击的位置 //pt=MAKEPOINTS(); ScreenToClient(&pt); 注释后,只能在一个地方弹出来,不过不是那三个件,好像还是有点儿问题! 那是你的rect没搞对吧..?本身你就是在鼠标右键相应函数里处理的..就不需要再做光标处理了..!-----你看看定义的rect对不对? 看了你的代码你rect 定义的就是整个客户区所以你点鼠标的时候//不过感觉好像是整个对话框,而不是只能在这三个控件上弹出来的 如何正确调用SetLayeredWindowAttributes? 问一个关于静态编译生成OCX控件的问题(顶贴给分) MFC中几种消息传递路径问题 服务器如何判断客户端已经退出 各位大侠能不能帮我解决下列的问题? 嵌入式软件有用VC开发的吗 怎样最简单地把GetLastError()的结果显示出来? VC和VB的调用问题 Access数据库? ******_______我把简单问题来问。。。。。。。。。。。。。。。。 windows API写的tooltip,怎么在键盘按下时显示tip,现在是鼠标移动才显示! 将一串字符的内容以字符指针的形式复制到另一字符数组中去
PtInRect(
POINT point
) 是判断点是否在矩形中。
CRect rect;
m_ctMsChart.GetClientRect(&rect);//假如:m_ctMsChart是Mschart的名称。
这个是得到rect的范围的。
rect.PtInRect(point)判断是否为真,如果为真,弹出。
void CdblView::OnRButtonDown(UINT nFlags, CPoint point)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
CPoint pt;
GetCursorPos(&pt);//获取光标点击的位置
//pt=MAKEPOINTS();
ScreenToClient(&pt); CRect Arect,Prect,Vrect;
m_chartA.GetClientRect(&Arect);//获取MSCHART1(m_chartA/p/v是关联的控件类型成员变量)控件的矩形区域
m_chartP.GetClientRect(&Prect);
m_chartV.GetClientRect(&Vrect);
if(Arect.PtInRect(pt)|Prect.PtInRect(pt)|Vrect.PtInRect(pt))
{
CMenu menu;//创建加载一个菜单资源
menu.LoadMenu(IDR_MENU1);
CMenu *pPopup=menu.GetSubMenu(0);
//ClintToScreen(&pt);
pPopup->TrackPopupMenu(TPM_LEFTALIGN,point.x,point.y,GetParent()); //弹出右键菜单
CFormView::OnRButtonDown(nFlags, point);
}
}
如果是,则使用一个就可以
2)void CdblView::OnRButtonDown(UINT nFlags, CPoint point)
这个point,就是鼠标点击的位置。
改成if (Arect.PtInRect(point)||Prect.PtInRect(point)||Vrect.PtInRect(point))
-------废代码---------
CPoint pt;
GetCursorPos(&pt);//获取光标点击的位置
//pt=MAKEPOINTS();
ScreenToClient(&pt);
不过感觉好像是整个对话框,而不是只能在这三个控件上弹出来的
我是想按着shanhqk说的来实现的.
把CPoint pt;
GetCursorPos(&pt);//获取光标点击的位置
//pt=MAKEPOINTS();
ScreenToClient(&pt);
注释后,只能在一个地方弹出来,不过不是那三个件,好像还是有点儿问题!
本身你就是在鼠标右键相应函数里处理的..
就不需要再做光标处理了..!-----
你看看定义的rect对不对?
所以你点鼠标的时候//不过感觉好像是整个对话框,而不是只能在这三个控件上弹出来的