一、點選菜單按鈕彈出對話框
1、在資源視圖中(.rc檔案夾下)找到menu,選擇需要彈框的菜單項;
2、點選菜單項,修改菜單ID,在主程式中用ON_COMMAND()将ID和函數關聯,要在主程式的頭檔案中聲明被關聯函數;
例:
菜單ID和函數關聯
ON_COMMAND(ID_Task,&CMFCExampleView::OnCreateTask)
聲明函數
afx_msg void OnCreateTask();
3、在資源視圖中(.rc檔案夾下)添加Dialog,為對話框建立類(CAboutDlg);
4、在2中被關聯的函數中寫如下代碼實作彈框
void CMFCExampleView::OnCreateTask()
{
CAboutDlg dlg;
dlg.DoModal();
}
5、在對話框OnBnClickedOk()中寫具體彈框實作内容;
注:
注意頭檔案的包含
二、用MessageBox()函數彈框
1、包含頭檔案
#include<windows.h>
2、例:
// LYZ modify 20170509
int result =MessageBox( TEXT("确定建立任務嗎?") , TEXT("建立任務") ,MB_YESNO);
switch(result)
{
case IDYES:
{
//點選YES按鈕的具體實作功能
CMFCExampleDoc* pVitaHypDoc =GetDocument();
pVitaHypDoc->getPostDoc()->getMesh()->DeleteAllData();
pVitaHypDoc->getPostDoc()->getResult()->clearData();
pVitaHypDoc->getTestDoc()->getMesh()->DeleteAllData();
pVitaHypDoc->getTestDoc()->getResult()->clearData();
pVitaHypDoc->getGroupManager()->removeAll();
pVitaHypDoc->m_vectorSensorLoadCaseManager.clear();
pVitaHypDoc->FlushAllSegment();
pVitaHypDoc->ClearCustomNotes();
UpdateCustomNote();
pVitaHypDoc->updateTxtNodes(NULL);
pVitaHypDoc->updateHoopsModel();
UpdateView();
((CMainFrame*)AfxGetMainWnd())->m_wndClassView.FillClassView();
((CMainFrame*)AfxGetMainWnd())->m_wndFileView.FillFileView();
break;
}
case IDNO:
break;
}
注意:
MessageBox()函數傳回值是整型,參數含義百度了解!
三、MFC對話框滑鼠右鍵彈出菜單,點選菜單彈出對話框
1、MFC對話框上點選滑鼠右鍵,彈出菜單
(1)打開對話框,在對話框上右鍵選擇類向導,選擇消息并選擇WM_RBUTTONDOWN(輕按兩下或選擇添加消息處理程式)
則會在該對話框的.cpp檔案中自動添加消息處理函數
// CChartDialog 消息處理程式
void CChartDialog::OnRButtonDown(UINT nFlags, CPoint point)
// TODO: 在此添加消息處理程式代碼和/或調用預設值
CDialogEx::OnRButtonDown(nFlags, point);
(2)添加右鍵彈出菜單,并添加響應函數
實作步驟:
a、建立一個菜單資源,IDR_TOOL_MENU
b、代碼實作
CMenu menu; //定義下面要用到的cmenu對象
menu.LoadMenu(IDR_TOOL_MENU); //裝載自定義的右鍵菜單
CMenu *pPopup = menu.GetSubMenu(0); //擷取第一個彈出菜單,是以第一個菜單必須有子菜單
CPoint point1;//定義一個用于确定光标位置的位置
GetCursorPos(&point1);//擷取目前光标的位置,以便使得菜單可以跟随光标
pPopup ->TrackPopupMenu(TPM_LEFTALIGN|TPM_RIGHTBUTTON,point1.x,point1.y,GetParent());//在指定位置顯示彈出菜單
(3)在資源視圖中右鍵單擊菜單項,選擇添加事件處理程式
(4)在資源視圖中為菜單中的每一項建立類向導,并添加Command響應函數,然後在這個函數中加入語句。
ON_COMMAND(ID_TOOL_DEL, &CDlgTool::OnToolDel)/
void CDlgTool::OnToolDel()
AfxMessageBox("成功!");
發現問題:
在上述步驟二中,
pPopup ->TrackPopupMenu(TPM_LEFTALIGN|TPM_RIGHTBUTTON,point1.x,point1.y,this);
this表示點選菜單的消息傳遞到本對話框,相應的改變其值也可以傳遞到其它對象。如GetParent(),傳遞到父對話框中。