1. 程式人生 > >MFC對話方塊程式載入選單、加速鍵、工具欄

MFC對話方塊程式載入選單、加速鍵、工具欄

MFC中程式分為三種:多文件程式、單文件程式和對話方塊程式,其中多文件和單文件程式預設帶有選單、加速鍵以及工具欄,下面介紹對話方塊程式中載入選單、加速鍵和工具欄的方法。

首先,新建一個對話方塊的程式,名稱叫做DlgTest,如下圖:


一、載入選單
首先,新建一個選單,如下圖所示,主選單名稱叫“檔案”,新增下拉選單“新建”、“關閉”。選單ID叫做:IDR_TEST_MENU

方法一,通過對話方塊的屬性進行新增:
選中對話方塊,選擇屬性->雜項->Menu項,點選下拉列表,可發現新建的選單已經在列表中,選中該選單即可。執行程式,發現選單已經載入:

方法二,通過程式碼新增:
在對話方塊對應的類中新增成員CMenu m_Menu;在對話方塊的OnInitDialog的對話方塊函式中新增如下程式碼:
BOOL CDlgTestDlg::OnInitDialog()
{
…….
m_Menu.LoadMenu(IDR_TEST_MENU);
this->SetMenu(&m_Menu);
……..
}
執行程式,發現也新增成功。


二、載入對話方塊
首先,為了驗證加速鍵新增有效,先為選單新建新增一個點選事件的處理程式:
void CDlgTestDlg::OnNew()
{
AfxMessageBox(_T("新建成功"));
}

執行程式,點選”新建”選單,彈出“新建成功”的對話方塊:


然後新增一個加速鍵Ctrl+N,加速鍵 ID和新建選單的ID保持一致,叫做ID_NEW:


在對話方塊類中新增加速鍵類的成員函式HACCEL m_Haccel,在對話方塊的OnInitDialog的對話方塊函式中新增如下程式碼:

BOOL CDlgTestDlg::OnInitDialog()
{
…….
m_Haccel=::LoadAccelerators(AfxGetResourceHandle(),MAKEINTRESOURCE(IDR_TEST_ACCELERATOR));
……..
}


過載對話方塊類的PreTranslateMessage虛擬函式,在裡面處理加速鍵訊息:

BOOL CDlgTestDlg::PreTranslateMessage(MSG* pMsg)
{

::TranslateAccelerator(this->m_hWnd,m_Haccel,pMsg);
return CDialogEx::PreTranslateMessage(pMsg);
}
執行程式,傳送Ctrl+N加速鍵,加速鍵載入成功。
注意:LoadAccelerators和TranslateAccelerator都是全域性的Win32函式,而非CDialog的成員函式。
三、載入工具欄
首先建立工具欄IDR_TEST_TOOLBAR,在工具欄中建立一個工具欄按鈕ID和新建選單的ID一致,都叫做ID_NEW.


然後在對話方塊類中新增成員CToolBar m_ToolBar,然後在對話方塊的OnInitDialog的對話方塊函式中新增如下程式碼:
BOOL CDlgTestDlg::OnInitDialog()
{
……
/*建立工具欄物件*/
m_ToolBar.CreateEx(this, TBSTYLE_FLAT,WS_CHILD | WS_VISIBLE | CBRS_ALIGN_TOP|CBRS_GRIPPER|CBRS_TOOLTIPS,CRect(2,2,0,0));
/*載入工具欄資源*/
m_ToolBar.LoadToolBar(IDR_TEST_TOOLBAR);
/*設定工具欄位置*/
RepositionBars(AFX_IDW_CONTROLBAR_FIRST,AFX_IDW_CONTROLBAR_LAST,0);

……
}
執行程式,工具欄載入成功,點選工具欄按鈕,彈出如下提示: