
以下过程适用于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)
}
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)