我做了一个界面
其中右键菜单的一些功能与工具栏的菜单是相同的
想将工具栏对应菜单的图标加到右键菜单的前面
但是不知道该怎么价之前我只要将工具栏菜单的ID名与主菜单的ID名设为同样
则两者响应的消息就是同样的,而且工具栏菜单的图标会自动加到主菜单的前面
为什么右键菜单就是不可以而且我将右键菜单的ID名与主菜单取成同样,但他却不响应主菜单响应的命令
比如说,主菜单点击后弹出一个对话框,但右键菜单点击了没反应
请问这是什么问题?谢谢
其中右键菜单的一些功能与工具栏的菜单是相同的
想将工具栏对应菜单的图标加到右键菜单的前面
但是不知道该怎么价之前我只要将工具栏菜单的ID名与主菜单的ID名设为同样
则两者响应的消息就是同样的,而且工具栏菜单的图标会自动加到主菜单的前面
为什么右键菜单就是不可以而且我将右键菜单的ID名与主菜单取成同样,但他却不响应主菜单响应的命令
比如说,主菜单点击后弹出一个对话框,但右键菜单点击了没反应
请问这是什么问题?谢谢
解决方案 »
- 发送数据出去,不报错,可是就是收不到这边发的数据?
- 如何读取PNG图片中每个像素点的信息
- DirectSound如何播放内存中的音频数据求解。。。。。
- 出差回来,坐车晕车,散分!
- MFC 键盘事件
- 如何实现将formView中 picture控件中的图片打印 ????
- 求助:如何获取导入的3D模型的数据结构。请师兄师姐们帮助。非常感谢!
- 请教一个初级问题:CTypedPtrList<CPtrList, CTaskframe*>
- 有什么办法在执行过程中往一个dos程序中传递数据?
- 请问有关superclassing(超类化)的问题
- 如何根据进程的id获得进程的名字
- MFC中WM_XXXX能否自己创建,如果能,如何创建???
比如你在 CYourDialog 里面弹出了右键菜单,就就应该把右键菜单的消息响应写在CYourDialog里面,而不能公用你的主菜单或者工具栏的消息响应。
右键菜单的消息响应是不是用WM_CONTEXTMENU来实现的?
而我要控制右键菜单是否变灰,要产生什么动作,也是在这里面控制的?to mynamelj(风之羽翼)
怎么设置右键菜单的父类?
我找不到该用哪个函数哦,麻烦告诉我一下吧
给右键添加图标是不是用SetMenuItemBitmaps来实现的?
如果是的话,感觉很麻烦哦
既然你的右键菜单已经弹出来了 没有必要这个了就是右键菜单上的按钮你要响应啊,比如你点击了一个右键菜单的一个按钮,它该干什么!
它的响应和主菜单以及工具栏按钮是一样的 采用类向导,找到你弹出右键菜单的类,然后找到右键菜单上按钮的ID,在右边的messages 框框里面不是有COMMAND消息和 UPDATE_COMMAND_UI消息嘛?响应这两个消息,就能控制它是否变灰了。设置它的父类:
pMenu->TrackPopupMenu(TPM_LEFTALIGN |TPM_RIGHTBUTTON, pt.x, pt.y, this);//把this改成你要设置的父类。this默认当前类为父类
// To show a popup menu on window
//--------------------------------------------------------------
BOOL ShowPopupMenu(CWnd* pWnd, UINT nID)
{
ASSERT(nID!=NULL && pWnd!=NULL);
CMenu menu;
CPoint pt;
GetCursorPos(&pt);
if(!menu.LoadMenu(nID))
{
TRACE0("Falied to load menu source.\n");
return FALSE;
}
CMenu* pPopup = menu.GetSubMenu(0);
ASSERT(pPopup != NULL);
pWnd->SetForegroundWindow();
return pPopup->TrackPopupMenu(TPM_LEFTALIGN | TPM_RIGHTBUTTON, pt.x, pt.y, pWnd);
}写给函数你去调用,这样比较简单点.如果你要控制菜单的项目变灰你可以用EnableMenuItem这个函数去处理
{
if (CFrameWnd::OnCreate(lpCreateStruct) == -1)
return -1; // Load bitmaps from resource. Both m_CheckBitmap and m_UnCheckBitmap
// are member variables of CMainFrame class of type CBitmap.
ASSERT(m_CheckBitmap.LoadBitmap(IDB_CHECKBITMAP));
ASSERT(m_UnCheckBitmap.LoadBitmap(IDB_UNCHECKBITMAP)); // Associate bitmaps with the "Test" menu item.
CMenu* mmenu = GetMenu();
CMenu* submenu = mmenu->GetSubMenu(3);
ASSERT(submenu->SetMenuItemBitmaps(ID_HELP_TEST, MF_BYCOMMAND,
&m_CheckBitmap, &m_UnCheckBitmap)); // ...
}CMainFrame::~CMainFrame()
{
// Destroy the bitmap objects if they are loaded successfully
// in OnCreate().
if (m_CheckBitmap.m_hObject)
m_CheckBitmap.DeleteObject(); if (m_UnCheckBitmap.m_hObject)
m_UnCheckBitmap.DeleteObject();
}这是CSDN上的源代码。
CMenu* submenu ;
CBitmap m_menuBitmap;
CPoint m_cursorpos;
GetCursorPos(&m_cursorpos);if (m_menuPopup.LoadMenu(IDR_TREE_MENU))
{
m_menuBitmap.LoadBitmap( IDR_MAINFRAME );
submenu = m_menuPopup.GetSubMenu(0);
submenu->SetMenuItemBitmaps(0, MF_BYPOSITION,
&m_menuBitmap, &m_menuBitmap);
}因为右键菜单的图标有很多是跟工具栏的图标相同的
而我发现工具栏的图标是单独存在一个文件里面的
我就想把工具栏的第一个图标设为右键第一个菜单的图标
工具栏的第二个图标设为右键第二个菜单的图标
上面的程序只实现了对右键第一个菜单的图标设置
请问其他菜单的图标该如何设置?
&m_menuBitmap, &m_menuBitmap);把第一个参数改(0)成其他菜单的位置就可以啦。
怎么把工具栏图标的位置改成第二个?
&m_menuBitmap是第一个图标哦
我把它直接加1是有错的
唉,决定还是不要右键图标了
多谢两位的帮忙
呵呵