VCMFC怎样添加右键菜单

VCMFC怎样添加右键菜单,第1张

思路是这样的,先在资源面板里添加一个menu资源,编辑成自己想要的,完成以后在需要右键单击触发的地方添加右键单击事件,代码里写入d出这个menu

CMenu m,*pm

if(!m.LoadMenu(IDR_MENU1)) MessageBox(_T("err"))//伏前芹IDR_MENU1是相应的资源id

pm=m.GetSubMenu(0)//获取子对话框

CPoint pot

GetCursorPos(&pot)//获取鼠标当前位置

pm->TrackPopupMenu(TPM_LEFTALIGN,pot.x,pot.y,this)//在鼠标位置d出菜单

注意,上面的pm是获取的是第一个主menu项下的子menu,比如设计menu资源的时候主menu从左到右是1,2,3,其中1下面又添加悔和了4,5,6

那么这个程序d出的menu就是4,5,6

自己建个工程缺毕体会一下就知道了

你好:利用SetMenuItemBitmaps这个函数可以做到

void

CPopupMenuDlg::OnLButtonDown(UINT

nFlags,

CPoint

point)

{

//

TODO:

在此添加消息处理程序代码和/或调用默认值

CMenu

menu//菜单

CMenu*

pPopupMenu//菜单指针

CBitmap

m_bitmap1//位图

menu.LoadMenu(IDR_MENU1)//加载ID为IDR_MENU1的姿坦菜单

m_bitmap1.LoadBitmap(IDB_BITMAP1)//加载ID为IDB_BITMAP1的位图

pPopupMenu

=

menu.GetSubMenu(0)

//获取d出菜单的第一层子菜单的类指针

//为菜单的第一和第三项设置图标

pPopupMenu->SetMenuItemBitmaps(0,MF_BYPOSITION,&m_bitmap1,&m_bitmap1)

pPopupMenu->SetMenuItemBitmaps(2,MF_BYPOSITION,&m_bitmap1,&m_bitmap1)

ClientToScreen(&point)//将鼠标单击处的坐标转换为屏幕坐标

//d出菜单函数,第一个参数表示快捷菜晌知单的下边界与由参数y指定的坐标对齐

//第二和第三个为x、y坐标,第四个表示拥有此菜单的窗口句柄,

//第五个默认为NULL,表示当用户在菜单宴册消以外的区域按鼠标键时,菜单会消失

pPopupMenu->TrackPopupMenu(TPM_BOTTOMALIGN,point.x,point.y,this,NULL)

CDialog::OnLButtonDown(nFlags,

point)

}

实例连接是:

http://www.cnblogs.com/anhuizhxd/archive/2009/06/20/cpopupmenu.html

有时候经常要打开一个文件所在的文件夹,去寻找其他的文件,比如要打开vc的工具目录运行没有列在开始菜单中的程序,或是修改一个程序的配置文件。对于有快捷方式的,吵拿一般的做法是在快捷方式升码搭上右击,打开快捷方式模毁的属性,通过find target来进入所在的文件夹。下面列出的vb script会直接打开快捷方式的目标文件所在的文件夹。通过修改注册表,可以在右键菜单上添加Open Folder项来调用这个脚本。 /************************open_shrtct_parent_folder.vbs******************************/ set args = WScript.Arguments linkname = args(0) set wshshell = CreateObject("WScript.Shell") set scut = wshshell.CreateShortcut(linkname) set fs = CreateObject("Scripting.FileSystemObject") folder = """" &fs.GetParentFolderName(scut.TargetPath) &"""" wshshell.Run(folder) /************************open_shrtct_parent_folder.vbs******************************/ /************************lnk.reg**************************/ Windows Registry Editor Version 5.00 [HKEY_CLASSES_ROOT\lnkfile\shell] [HKEY_CLASSES_ROOT\lnkfile\shell\Open Folder] [HKEY_CLASSES_ROOT\lnkfile\shell\Open Folder\command] @="wscript.exe \"F:\\Scripts\\open_shrtct_parent_folder.vbs\" \"%L\"" /************************lnk.reg**************************/ 注:

请修改上面的F:\\Scripts\\open_shrtct_parent_folder.vbs为实际存放open_shrtct_parent_folder.vbs的路径。 2. 不要复制/*****/行。 脚本的速度还是有点慢,有点电脑上测试打开会有比较大的延迟,但也有表现飞快地。 其实我一直使用C/C++,对vb和script都不熟。谁有兴趣可以直接写一个注册的脚本。


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/bake/11973319.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-20
下一篇2023-05-20

发表评论

登录后才能评论

评论列表(0条)

    保存