天天看點

MFC彈出對話框幾種方法總結

一、點選菜單按鈕彈出對話框

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(),傳遞到父對話框中。

繼續閱讀