如何給對話框添加“加速鍵”響應

MFC的對話框(不是從CFrameWnd類繼承下來的),不會自動響應加速鍵,這需要自己添加代碼去實現這個功能

@1.對話框中添加成員變量:

HACCEL m_hAccel;

@2.在OnInitDialog()函數中添加代碼:
	// 裝載加速鍵
	m_hAccel = ::LoadAccelerators(AfxGetResourceHandle(), MAKEINTRESOURCE(IDR_ACCELERATOR1));
	ASSERT(m_hAccel);


@3.重載PreTranslateMessage函數:
BOOL CMainDlg::PreTranslateMessage(MSG *pMsg)
{
    if (WM_KEYFIRST <= pMsg->message && pMsg->message <= WM_KEYLAST)
    {
        if (m_hAccel && ::TranslateAccelerator(m_hWnd, m_hAccel, pMsg))
            return TRUE;
    }
    return CDialog::PreTranslateMessage(pMsg);
}

@4.後面的操作就和Frame-View框架的程序一樣了:
    a.資源中插入一個加速鍵IDR_ACCELERATOR1,編輯一個加速鍵的值
      如ID_XXXX, VK_F9, VIRTKEY
    b.添加成員函數void Xxxx(void)
    c.在BEGIN_MESSAGE_MAP、END_MESSAGE_MAP之間添加
      ON_COMMAND(ID_XXXX, &CMyDlg::Xxxx)


這樣對話框就能響應加速鍵調用對應的函數了
發佈了69 篇原創文章 · 獲贊 53 · 訪問量 100萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章