请教两个右键菜单的问题 1、在不重载CEDIT的情况下,怎样屏蔽CEDIT的右键菜单。2、CEDIT的右键菜单没有触发WM_INITMENUPOPUP事件,怎样才能在CEDIT右键菜单中加入自己的项目 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 在PreTranslateMessage中拦截并过滤消息? 没有用,在CEDIT所在的CWND中的WindowProc,DefWindowProc,PreTranslateMessage和重载的CEDIT类的WindowProc,DefWindowProc,PreTranslateMessage中都没有拦截到WM_INITMENU 、WM_INITMENUPOPUP 消息。如果在重载的CEDIT类中响应了ON_WM_CONTEXTMENU的事件后,就可以拦截到WM_INITMENU 、WM_INITMENUPOPUP 消息,但响应了ON_WM_CONTEXTMENU的事件后,CEDIT就不出来原来自带的右键菜单了。 //我这里有个思路,代码如下BOOL CTestDlg::PreTranslateMessage(MSG* pMsg) { // TODO: Add your specialized code here and/or call the base class if(WM_RBUTTONDOWN == pMsg->message) { //HandleEditRButtonDown(...)是右键单击处理函数,自己定义 if(HandleEditRButtonDown(pMsg->pt.x,pMsg->pt.y)) return TRUE; } return CDialog::PreTranslateMessage(pMsg);}//处理右键单击BOOL CTestDlg::HandleEditRButtonDown(int x, int y){ RECT rect; CMenu menu; CMenu *pSubMenu=NULL; m_edit.GetClientRect(&rect);//m_edit就是要处理的编辑框关联变量 m_edit.ClientToScreen(&rect); //确保右键单击是在编辑框内 if(x >= rect.left && x <= rect.right && y >= rect.top && rect.bottom) { //in edit VERIFY(menu.LoadMenu(IDR_MENU)); if(menu.m_hMenu) { pSubMenu=menu.GetSubMenu(0); pSubMenu->TrackPopupMenu(TPM_LEFTALIGN,x,y,this); pSubMenu->Detach(); } else return FALSE; return TRUE; } return FALSE;} 试过用GetSysMenu, GetMenu,取不了句柄,否则倒不是难事。 支持在PreTranslateMessage里面做手脚. 谢谢qifa()的建议,我再试试第一个问题还有没有更简单的方法来屏闭掉CEDIT的右键菜单,比如设置CEDIT的属性第二个问题是能不能在CEDIT的右键上加上自己的菜单 IE浏览器设置中,关闭浏览器时清空Internet临时文件夹对应IE注册表哪个键?? 在编程的时候出现如下的错误是怎么回事啊? 我想给网吧做一个小程序,要使克隆的系统运行此程序给计算机改名和ip(强烈推荐) 在哪里可以下载到免费的uinx? 如何改變Window的BackColor? 如何把CString类型转变成char *类型 最大可以new 多大? <<vc技术内幕>>买哪个出版社的好啊,希望的还是清华的啊,? 大家不要笑 如何让IE每次启动打开得网页都不相同? 关于在局域网中模拟公网中的通讯的问题。 在IE工具栏中创建下拉菜单的问题
如果在重载的CEDIT类中响应了ON_WM_CONTEXTMENU的事件后,就可以拦截到WM_INITMENU 、WM_INITMENUPOPUP 消息,但响应了ON_WM_CONTEXTMENU的事件后,CEDIT就不出来原来自带的右键菜单了。
{
// TODO: Add your specialized code here and/or call the base class
if(WM_RBUTTONDOWN == pMsg->message)
{
//HandleEditRButtonDown(...)是右键单击处理函数,自己定义
if(HandleEditRButtonDown(pMsg->pt.x,pMsg->pt.y))
return TRUE;
}
return CDialog::PreTranslateMessage(pMsg);
}
//处理右键单击
BOOL CTestDlg::HandleEditRButtonDown(int x, int y)
{
RECT rect;
CMenu menu;
CMenu *pSubMenu=NULL;
m_edit.GetClientRect(&rect);//m_edit就是要处理的编辑框关联变量
m_edit.ClientToScreen(&rect);
//确保右键单击是在编辑框内
if(x >= rect.left && x <= rect.right &&
y >= rect.top && rect.bottom)
{
//in edit
VERIFY(menu.LoadMenu(IDR_MENU));
if(menu.m_hMenu)
{
pSubMenu=menu.GetSubMenu(0);
pSubMenu->TrackPopupMenu(TPM_LEFTALIGN,x,y,this);
pSubMenu->Detach();
}
else return FALSE;
return TRUE;
}
return FALSE;
}
第一个问题还有没有更简单的方法来屏闭掉CEDIT的右键菜单,比如设置CEDIT的属性
第二个问题是能不能在CEDIT的右键上加上自己的菜单