MFC添加菜单并为其设定快捷键

MFC添加菜单并为其设定快捷键,第1张

以下过程适用于VC6.0版本。

添加菜单:

第一步,建立基于对话框的工程。

第二步,添加menu资源,添加菜单项,设其ID为IDR_MENUADD,添加所需要的菜单项。

第三步,在menu资源界面按Ctrl+W进入ClassWizard,此时会d出一个对话框,选中“select an exitingclass”,然后在select class对话框中选中主对话框类。然后点OK。

第四步,打开主对话框的属性,general下有一menu选项,选中刚才添加的mune资源的ID.如下:

最后,程序运行如下:

设定快捷键

第一步,添加资源Accleerator,如下,点击New

第二步,在ResourceView下打开Accleerator ,打开IDR_ACCELERATOR1

然后双击两虚线之间部分,会d出一个设置的对话框,在ID栏选中要设置的菜单ID,在Key栏,设置你想要的快捷键,如下:

第三步,在菜单项添加快捷键说明

第一步:在资源视图窗中右键插入Accelerator资源,然后修改Accel属性里的快捷键;

第二步:声明一个HACCEL全局变量,在OnInitDialog()中添加

hACCTable=LoadAccelerators(AfxGetInstanceHandle(),MAKEINTRESOURCE("快捷键表ID"))

第三步:添加PreTranslateMessage相应函数,添加代码

if(::TranslateAccelerator(m_hWnd,hAccTable,pMsg))//hAccTable为HACCEL全局变量

{

return true

}

第四步:为快捷键添加COMMAND响应函数,函数内容就是调用你的按钮相应函数

void NotifyShell(LONG wEventId,//事件标志

LPSTR szPath)//路径

{

SHChangeNotify( wEventId,

SHCNF_FLUSH | SHCNF_PATH,

szPath,0)

//取得szPath的父目录

char* p

for( p=szPath+lstrlen(szPath)-1

*p != '\\'

p--)

*p='\0'

SHChangeNotify(SHCNE_UPDATEDIR

|SHCNE_INTERRUPT,

SHCNF_FLUSH | SHCNF_PATH,szPath,0)

}

//创建快捷方式

BOOL CreateLink (LPSTR szPath,//快捷方式的目标应用程序名

LPSTR szLink)//快捷方式的数据文件名(*.lnk)

{

HRESULT hres

IShellLink * psl

IPersistFile* ppf

WORD wsz[ MAX_PATH]

////初始化COM

CoInitialize (NULL)

//创建一个IShellLink实例

hres = CoCreateInstance( CLSID_ShellLink, NULL,

CLSCTX_INPROC_SERVER, IID_IShellLink,

(void **)&psl)

if( FAILED( hres))

{

CoUninitialize ()

return FALSE

}

//设置目标应用程序

psl -> SetPath( szPath)

//设置快捷键(此处设为Shift+Ctrl+'R')

// psl -> SetHotkey( MAKEWORD( 'R',

// HOTKEYF_SHIFT |HOTKEYF_CONTROL))

char* p

for( p=szPath+lstrlen(szPath)-1

*p != '\\'

p--)

*p='\0'

psl -> SetWorkingDirectory(szPath)

//从IShellLink获取其IPersistFile接口

//用于保存快捷方式的数据文件 (*.lnk)

hres = psl -> QueryInterface( IID_IPersistFile,

(void**)&ppf)

if( FAILED( hres))

{

CoUninitialize ()

return FALSE

}

// 确保数据文件名为ANSI格式

MultiByteToWideChar( CP_ACP, 0, szLink, -1,

wsz, MAX_PATH)

//调用IPersistFile::Save

//保存快捷方式的数据文件 (*.lnk)

hres = ppf -> Save( wsz, STGM_READWRITE)

//释放IPersistFile和IShellLink接口

ppf -> Release( )

psl -> Release( )

CoUninitialize ()

return TRUE

}

void CreateThisAppShortcut()

{

char szPath[MAX_PATH]=""

//快捷方式的目标应用程序名

char szLink[MAX_PATH]=""

//快捷方式的数据文件名

////桌面快捷方式

GetModuleFileName(NULL, szPath, MAX_PATH)

GetWindowsDirectory(szLink, MAX_PATH)

if(szLink[lstrlen(szLink)-1] == '\\')

lstrcat(szLink, "Desktop\\EStk接收设置.lnk")

else

lstrcat(szLink, "\\Desktop\\EStk接收设置.lnk")

// CFile f

// if(f.Open(szLink, CFile::modeRead))

// return

// 创建快捷方式

if(!CreateLink( szPath, szLink) )

return

// 通知shell有关变化

NotifyShell( SHCNE_CREATE|SHCNE_INTERRUPT,

szLink)

////快速启动快捷方式

GetModuleFileName(NULL, szPath, MAX_PATH)

GetWindowsDirectory(szLink, MAX_PATH)

if(szLink[lstrlen(szLink)-1] == '\\')

lstrcat(szLink, "Application Data\\Microsoft\\Internet Explorer\\Quick Launch\\EStk接收设置.lnk")

else

lstrcat(szLink, "\\Application Data\\Microsoft\\Internet Explorer\\Quick Launch\\EStk接收设置.lnk")

if(!CreateLink( szPath, szLink) )

return

NotifyShell( SHCNE_CREATE|SHCNE_INTERRUPT,

szLink)

}


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

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

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

发表评论

登录后才能评论

评论列表(0条)

    保存