1. 程式人生 > >MFC小總結_2_對話方塊概述1

MFC小總結_2_對話方塊概述1

對話方塊的概述_1 分為模態對話方塊和非模態對話方塊。對話方塊的基類為CDialog類:常用的有以下及格成員函式 DoModal():開啟 模態對話方塊,直到對話方塊關閉時返回。 Create(LPCTSTR lpszTemplateName,Cwnd *pParentwnd=NULL)     ShowWindow(SW_SHOW):建立一個對話方塊,常用於 非模態對話方塊的建立 EndDialog(int nResult):退出一個模態對話方塊 void OnCancel():單擊對話方塊中的cancel按鈕或esc鍵呼叫的函式 BOOL OnInitDialog():對話方塊初始化 void OnOK():單擊OK按鈕時呼叫的函式
模態與非模態對話方塊的建立和引用: 一、模態: 1)建立單文件MFC,而後在資源檢視dialog'類中右鍵新增新的對話方塊(有時候會修改ID),在對話方塊上右擊選屬性,可以改標題名(caption),ID名字等; 2)再在對話方塊上右擊新增類,出現類似下圖,在classname中寫入類名CXXX,下面會自動寫出XXX.h和XXX.cpp

3)然後在檢視類原始檔Cfilenameview.cpp中包含此標頭檔案#include "XXX.h",而後在某個事件函式中宣告並操作對話方塊:XXX  dl;  dl.DoModal()(此為開啟對話方塊的例子) 如果想新增對應的選單項的話,在資源檢視的menu類中的主選單項中(注,由於下面沒有了子選單,所以他的屬性項popup屬性為“False”)新增選單,然後改ID,並右鍵新增事件處理程式,在filenameview.cpp中新增“XXX.h”檔案然後編輯OndDalog函式(大概在最後的位置)
二、非模態: 1)前面相同,注意使用Create函式建立對話方塊物件,並通過ShowWindow函式顯示(定義類的物件只能是指標型別),最後要用DestroyWindow函式關閉對話方塊(OnOk和OnCANCEL函式僅僅是隱藏對話方塊)。

三、通用對話方塊:指系統已經定義好的可直接拿來使用的對話方塊。 CFileDialog:檔案對話方塊,用於開啟儲存檔案 CColorDialog:顏色對話方塊,用於選擇不同的顏色 CFontDialog:字型對話方塊,用於選擇字型。字型、大小、字型效果和顏色 CPrintDialog:列印對話方塊,用於列印和列印設定 CPageSetupDialog:頁面設定對話方塊,設定和修改列印邊距等 CFindRelaceDialog:查詢和替換對話方塊,用於查詢和替換文字串

訊息對話方塊:(MessageBox或AfxMessageBox類): 使用格式:int AfxMessageBox(LPCTSTR lpText,UINT nType=MB_OK,UINT nIDHelp=0);  第一個引數為彈出訊息框的資訊,二三引數同下面三四引數 int MessageBox(HWND hWnd,LPCTSTR lpText,LPCTSTR lpCaption,UINT nType); 第一個引數為彈出訊息框的標題,第二個為彈出訊息框中的資訊,三四個分別為圖表型別和按鈕型別,具體如下

MessageBox(_T("這是一個單文件應用程式!"), _T("訊息框"), MB_ICONEXCLAMATION|MB_OKCANCEL);或者AfxMessageBox(_T("這是一個單文件應用程式!"),MB_ICONEXCLAMATION|MB_OKCANCEL);  注:當使用unicode庫的時候字串需要有_T("    ");


顏色對話方塊(CColorDialog類): 主要步驟: 1)在對話方塊中相應位置構造CCOlorDialog物件 2)調動DoModal函式開啟顏色選擇對話方塊,然後用GetColor函式獲取得到的顏色 例如: CClientDC dc(this);//指向本視窗或當前活動檢視
  CColorDialog coldlg;
  if(coldlg.DoModal()==IDOK)
  {
COLORREF col; //變數col,A 32-bit value used as a color value.
        col=coldlg.GetColor(); //獲取選擇的顏色
dc.SetTextColor(col);
dc.TextOut(250,250,_T("顏色被選定"));
    }


字型對話方塊:(CFontDialog類) 下面為主要成員函式:
步驟: 1)定義LOGFONT物件f1,並定義CFontDialog物件dlg(&f1) 2)通過DoModal函式開啟字型對話方塊,然後通過CFont的成員函式進行操作,如CreateFontIndirect建立字型,並同GetColor函式獲取所選顏色
例子:  CClientDC dc(this);
  LOGFONT f1;// LOGFONT結構體,包含字型資訊
  COLORREF c1;
  CFontDialog fontdlg(&f1);
  if(fontdlg.DoModal()==IDOK)
  {
      CFont f2;//Cfont字型類
      f2.CreateFontIndirect(&f1);//建立一種結構體定義特性的字型
      CFont *oldfont=dc.SelectObject(&f2);
      c1=fontdlg.GetColor();
      dc.SetTextColor(c1);
      dc.TextOut(250,250,_T("字型被選定"));
      dc.SelectObject(oldfont);
  }
檔案對話方塊(CFileDialog類): 步驟: 1)構造CFileDialog函式的物件: CFileDialog dlg(TRUET("*.bmp“), OFN_HIDEREADONLY
|OFN_ALLOWMULTISELECT,_T("文字,_T("bmp“),_檔案(*.txt)|*.txt|Word檔案(*.doc)|*.doc||"));
第1個引數TRUE:【開啟】對話方塊;若為FALSE則為【儲存】對話方塊
第2個引數“bmp”:如果在檔名對話方塊中輸入檔名時未指定副檔名,則會自動附加“.bmp”;
第3個引數“*.bmp”:檔名對話方塊中的初始檔名是*.bmp;
第4個引數代表dwFlags:不顯示隱藏檔案,且可以在列表框中進行多選;
如:OFN_EXPLORER,OFN_HIDEREADONLY,OFN_ALLOMULTISELECT
第5個引數是過濾器:允許開啟檔案的型別,可以多選,以|表示或者,以||表示結束。

2)呼叫DoModal函式開啟對話方塊,如果返回的是IDOK,則呼叫成員函式獲取資訊 參考程式碼: CFileDialog dlg(FALSE,_T("txt"),_T("*.txt"),OFN_EXPLORER ,_T("文字檔案(*.txt)|*.txt|所有檔案(*.*)|*.*|"));
CString s;
if(dlg.DoModal()==IDOK)
{
s=dlg.GetPathName();
MessageBox(s+_T("被儲存"),_T("儲存檔案"));
}