VC中我們經(jīng)常使用到快捷鍵,這里快捷鍵有多種,包括menu,button。另外還區(qū)分local的和global的, 其中l(wèi)ocal的職能在當前程序有焦點(被激活)時有效,而global的,則無論什么時候都有效,測試local的要優(yōu)先于global的,就是如果當前激活窗口的快捷鍵與未激活窗口的快捷鍵重疊,當前激活窗口優(yōu)先響應。
這里將快捷鍵分為menu和button兩種。
menu添加local快捷鍵又分為兩種, 一種是直接與菜單項關(guān)聯(lián)的加速鍵,另一種就是自定義的加速鍵.
第一種: 首先在資源文件Accelerator中添加快捷鍵資源 ID選擇你要關(guān)聯(lián)菜單項的名稱 然后再設(shè)置你的快捷鍵.什么?下一步?在.h文件中加入一個 HACCEL hAccel;變量 然后在OnInitDialog或初始化中加入hAccel=::LoadAccelerators(AfxGetInstanceHandle(),MAKEINTRESOURCE(IDR_MENU_MAIN)); 后面的參數(shù)改成加速鍵的資源文件名.
最后在PreTranslateMessage(MSG* pMsg) 中加入:
if(::TranslateAccelerator(GetSafeHwnd(),hAccel,pMsg))
return true;
這樣 以后只要在Accelerator資源文件中添加快捷鍵就可以了
注意: 添加快捷鍵的名字一定要與菜單名稱一樣 這樣才能響應.現(xiàn)在只需要在此菜單項中加入OnCommand消息的處理就可以了.
第二種: 還是在資源文件Accelerator中添加快捷鍵資源 ID自己定義一個.然后再設(shè)置你的快捷鍵.下一步...就是在.h文件中定義一個快捷鍵對象
HACCEL m_hAccel;
然后在.cpp文件中初始
m_hAccel = ::LoadAccelerators(AfxGetInstanceHandle(),MAKEINTRESOURCE(IDR_ACCELERATOR1));
IDR_ACCELERATOR1為你的加速資源名稱.注意不是剛剛定義的加速鍵ID.
再添加PreTranslateMessage消息處理 在里面加入以下代碼:
//保存快捷鍵被啟用
if(m_hAccel != NULL)
{
if (TranslateAccelerator(m_hWnd, m_hAccel, pMsg))
return TRUE;
}
再添加OnCommand消息處理 加入以下代碼:
//響應加速鍵
switch(LOWORD(wParam))
{
case SHOW_DIAL0G: //加速鍵ID
//...添加處理語句
break;
case SHOW_DIALOG_02: //加速鍵ID
//...添加處理語句
break;
}
menu添加global快捷鍵
以對話框程序為例:
在OnInitDialog中添加注冊熱鍵的代碼:
RegisterHotKey(GetSafeHwnd(),1001,NULL,VK_F2);//F2鍵
RegisterHotKey(GetSafeHwnd(),1002,MOD_ALT,'1');//Alt+1鍵
在
BEGIN_MESSAGE_MAP(CXXXDlg, CDialog)
...
END_MESSAGE_MAP()
中添加WM_HOTKEY的消息映射:
ON_MESSAGE(WM_HOTKEY,&CXXXDlg::OnHotKey)//快捷鍵消息映射手動加入
在頭文件中添加OnHotKey的聲明:
protected:
afx_msg LRESULT OnHotKey(WPARAM wParam,LPARAM lParam);//手動加入.
CPP中OnHotKey的實現(xiàn)代碼:
//相應快捷鍵的消息映射
LRESULT CXXXDlg::OnHotKey(WPARAM wParam,LPARAM lParam)
{
if(wParam ==1001)
{
MessageBox("熱鍵F2已經(jīng)按下!");
//這里可以加上你按鈕要執(zhí)行的操作,或者直接調(diào)用按鈕映射的消息函數(shù)
}
else if (wParam==1002)
{
MessageBox("熱鍵ALT+1已經(jīng)按下!");
}
return 0;
}
關(guān)閉對話框時使用
UnregisterHotKey(GetSafeHwnd(),1001);//注銷F2鍵
UnregisterHotKey(GetSafeHwnd(),1002);//注銷Alt+1鍵
注銷熱鍵.
button添加locak快捷鍵可以直接在button的caption中用 &+'X' 即可,則按下 Alt + 'x' 即按下此按鈕,起到快捷鍵的作用
另外還可以學習menu添加local快捷鍵的第二種方式,在PreTranslateMessage中添加處理函數(shù)。
button添加global快捷鍵同menu添加global快捷鍵。
加載資源(MFC的Dialog Based中):
HACCEL hAcc = LoadAccelerators (m_hInstance, MAKEINTRESOURCE(IDR_ACCELERATOR1));
需要在
PreTranslateMessage中一行
if (TranslateAccelerator(GetSafeHwnd(), m_hAcc, pMsg))return TRUE;
posted on 2012-09-05 13:58
王海光 閱讀(1508)
評論(0) 編輯 收藏 引用 所屬分類:
MFC