目錄
(本章節中例子都是用 VS2005 編譯調試的)
顏色對話框 CColorDialog
類成員變量
m_cc成員變量
作用: 記入選擇結果,和對話框初始樣式.
數據類型: CHOOSECOLOR 結構體. CHOOSECOLOR結構的定義如下(MSDN參考鏈接):
View Code
typedef struct { DWORD lStructSize; //結構長度 HWND hwndOwner; //對話框的擁有窗口 HWND hInstance; COLORREF rgbResult; //表示選擇結果的樣色值 COLORREF *lpCustColors; DWORD Flags; //設置顏色對話框的功能與外觀 LPARAM lCustData; LPCCHOOKPROC lpfnHook; LPCTSTR lpTemplateName; } CHOOSECOLOR, *LPCHOOSECOLOR;
常用成員函數(MSDN鏈接)
獲取顏色
函數原型:
COLORREF GetColor() const;
返回值: 返回一個COLORREF結構,其中包含了對話框中選中的顏色的RGB顏色值
說明: 本函數用於檢索用戶在對話框中選中的顏色.必須在DoModal之后調用
創建模態對話框
函數原型:
virtual int DoModal();
返回值: IDOK 或者 IDCANCEL.如果返回了IDCANCEL,則可以調用Windows函數CommDlgExtendedError來檢測是否發生了錯誤
說明:
- 本函數用於顯示Windows通用顏色對話框並接收用戶的選擇.
- 如果想通過設置m_cc結構的各個成員來初始化不同的顏色對話框,應在對話框對象構造之后,調用DoModal之前進行.
- 在調用DoModal之后,可以調用其它的成員函數檢索設置信息和用戶輸入的信息
編寫顏色對話框
流程圖:

代碼樣例:
實現如下:
View Code
//創建顏色對話框對象 CColorDialog dlg; //修改顏色對話框相關屬性 dlg.m_cc.Flags|=CC_RGBINIT; //創建模態的顏色對話框 if(IDOK==dlg.DoModal()) { //用選定的顏色輸出文本 "顏色" CString str; CClientDC pDC(this); //pDC.SetTextColor(dlg.m_cc.rgbResult); pDC.SetTextColor(dlg.GetColor()); str = "顏色"; pDC.TextOutW(190,50,str); }
創建一個 MFC 基於對話框工程,然后在對話框上拖一個 button 控件,如下圖所示,然后為 button 添加單擊事件響應函數,在函數添加以上代碼,后運行程序

字體對話框 CFontDialog
成員變量
m_cf 成員變量
作用: 用於保存字體對話框結果,和對話框初始樣式.
數據類型: 一個指向 CHOOSEFONT 的結構的指針,結構定義如下:(MSDN鏈接)
View Code
typedef struct { DWORD lStructSize; HWND hwndOwner; HDC hDC; LPLOGFONT lpLogFont; //指向邏輯字體LOGFONT指針 INT iPointSize; DWORD Flags; //設置字體對話框的功能與外觀 COLORREF rgbColors; LPARAM lCustData; LPCFHOOKPROC lpfnHook; LPCTSTR lpTemplateName; HINSTANCE hInstance; LPTSTR lpszStyle; WORD nFontType; WORD ___MISSING_ALIGNMENT__; INT nSizeMin; INT nSizeMax; } CHOOSEFONT, *LPCHOOSEFONT
其中 LOGFONT 結構定義如下:
View Code
typedef struct tagLOGFONT { LONG lfHeight; LONG lfWidth; LONG lfEscapement; LONG lfOrientation; LONG lfWeight; BYTE lfItalic; BYTE lfUnderline; BYTE lfStrikeOut; BYTE lfCharSet; BYTE lfOutPrecision; BYTE lfClipPrecision; BYTE lfQuality; BYTE lfPitchAndFamily; TCHAR lfFaceName[LF_FACESIZE]; //字體名稱 } LOGFONT, *PLOGFONT;
常用成員函數(MSDN 鏈接)
顯示相關函數
[判斷字體是否是突出][判斷字體是否是下划線][判斷字體是否是黑體][判斷字體是否是斜體][獲得選擇字體顏色][返回字體大小][返回字體風格名稱][返回字樣名稱][返回字體具體信息][調用模態對話框]
函數原型:
BOOL IsStrikeOut()const;
返回值: 如果被選字體具有突出特征,則返回非零值,否則為0
函數原型:
BOOL IsUnderline()const;
返回值: 如果被選字體具有下划線特征,則返回非零值,否則為0
函數原型
BOOL IsBold()const;
返回值: 如果選定字體具有黑體特征,則返回非零值,否則為0
函數原型:
BOOL IsItalic()const;
返回值: 如果被選字體具有斜體特征,則返回非零值,否則為0
函數原型:
COLORREF GetColor( )const;
返回值: 選定字體的顏色
說明: 調用此成員函數獲取選定字體的顏色
函數原型 :
int GetSize( )const;
返回值: 字體大小,以0.1點表示
說明: 調用此成員函數獲取選定字體的大小
函數原型:
CString GetStyleName( )const;
返回值: 字體的風格名稱
說明: 調用此成員函數獲取選定字體的風格名稱
函數原型:
CString GetFaceName ( ) const;
返回值: 在CFontDialog對話框中選擇字體的字樣名稱
說明: 調用此成員函數獲取選擇的字體字樣名稱
函數原型:
void GetCurrentFont(LPLOGFONT lplf);
參數說明: lplf 指向LOGFONT結構的指針
說明:
- 調用此成員函數,將當前選定字體的特征分配給各個LOGFONT結構的成員.其它CFontDialog成員函數訪問當前字體的單個特征.
- 如果在調用DoModal時調用此成員函數,則返回當前選定部分(用戶見到的或已被改變的).如果在DoModal之后調用此成員函數(僅當DoModal返回IDOK時),則返回用戶實際選擇的部分
函數原型:
virtual int DoModal( );
返回值: IDOK 或 IDCANCEL.如果返回 IDCANCEL,則調用 WindowsCommDlgExtendedError 函數判斷是否發生了錯誤.IDOK 或 IDCANCEL 是表明用戶選擇了 OK 還是 Cancel 按鈕的常數
說明:
- 調用此成員函數顯示一個Windows通用字體對話框,並允許用戶選擇一種字體.
- 如果想用設置m_cf結構成員的方法初始化各種字體對話控件,則應在調用DoModal之前,及創建了對話對象之后進行.
- 如果DoModal返回IDOK,可用其它成員函數獲得用戶輸入對話框的設置或信息
編寫字體對話框
流程圖:

代碼樣例:
實現如下:
View Code
//創建字體對話框對象 CFontDialog dlg; //修改字體對話框相關屬性 dlg.m_cf.Flags |= CF_USESTYLE; //創建模態的字體對話框 if(IDOK==dlg.DoModal()) { //用選定的字體輸出文本 "字體顯示" CString str; CClientDC pDC(this); CFont *pOldFont,font; //用 CFont 創建對話框選中的邏輯字體 font.CreateFontIndirect(dlg.m_cf.lpLogFont); //將字體選入設備描述表 pOldFont=pDC.SelectObject(&font); //將字體選擇的顏色設置為字體顏色 pDC.SetTextColor(dlg.m_cf.rgbColors); str = "字體顯示,字體名稱為:"; str += dlg.m_cf.lpLogFont->lfFaceName; pDC.TextOutW(10,50,str); //還原原先的字體 pDC.SelectObject(pOldFont); }
創建一個 MFC 基於對話框工程,然后在對話框上拖一個 button 控件,如下圖所示,然后為 button 添加單擊事件響應函數,在函數添加以上代碼,后運行程序.

文件對話框 CFileDialog
成員變量
m_ofn 成員變量
作用: 用這個成員變量的記錄選擇結果,和對話框初始樣式.
數據類型: 一個指向 OPENFILENAME 結構體指針
View Code
typedef struct tagOFN { DWORD lStructSize; HWND hwndOwner; HINSTANCE hInstance; LPCTSTR lpstrFilter; LPTSTR lpstrCustomFilter; DWORD nMaxCustFilter; DWORD nFilterIndex; LPTSTR lpstrFile; DWORD nMaxFile; LPTSTR lpstrFileTitle; DWORD nMaxFileTitle; LPCTSTR lpstrInitialDir; LPCTSTR lpstrTitle; DWORD Flags; WORD nFileOffset; WORD nFileExtension; LPCTSTR lpstrDefExt; LPARAM lCustData; LPOFNHOOKPROC lpfnHook; LPCTSTR lpTemplateName; #if (_WIN32_WINNT >= 0x0500) void *pvReserved; DWORD dwReserved; DWORD FlagsEx; #endif } OPENFILENAME, *LPOPENFILENAME;
成員函數(MSDN 鏈接)
顯示相關函數
[構造函數][獲得文件完整路徑][獲得文件目錄路徑][獲得文件名(含擴展名)][獲得文件擴展名][獲得文件名][獲得第一個文件位置(在多選的情況)][返回文件路徑,並設置下個位置(在多選的情況)][對話框模態創建]
函數原型:
explicit CFileDialog( BOOL bOpenFileDialog, LPCTSTR lpszDefExt = NULL, LPCTSTR lpszFileName = NULL, DWORD dwFlags = OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, LPCTSTR lpszFilter = NULL, CWnd* pParentWnd = NULL, DWORD dwSize = 0 );
參數說明:
- bOpenFileDialog: 為TRUE則顯示打開對話框,為FALSE則顯示保存對話文件對話框
- lpszDefExt: 指定默認的文件擴展名
- lpszFileName: 指定默認的文件名
- dwFlags: 指明一些特定風格
- lpszFilter: 是最重要的一個參數,它指明可供選擇的文件類型和相應的擴展名。參數格式如:
"Chart Files (*.xlc)|*.xlc|Worksheet Files (*.xls)|*.xls|Data Files (*.xlc;*.xls)|*.xlc; *.xls|All Files (*.*)|*.*||";
- 文件類型說明和擴展名間用 | 分隔
- 同種類型文件的擴展名間可以用 ; 分割
- 每種文件類型間用 | 分隔
- 末尾用 || 指明.
- pParentWnd: 為父窗口指針.
函數原型:
CString GetPathName()const;
返回值: 得到完整的文件名包括目錄名和擴展名如:c:\test\test1.txt
函數原型:
CString GetFolderPath( ) const;
返回值: 獲得文件所在目錄路徑
函數原型:
CString GetFileName( )const;
返回值: 得到完整的文件名包括擴展名如:test1.txt
函數原型:
CString GetExtName()const;
返回值: 得到完整文件擴展名如:txt
函數原型:
CString GetFileTitle ()const;
返回值: 得到完整的文件名不包括目錄名和擴展名如:test1
函數原型:
POSITION GetStartPosition()const;
返回值: 對於選擇了多個文件的情況得到第一個文件位置
函數原型:
CString GetNextPathName( POSITION& pos )const;
返回值: 對於選擇了多個文件的情況得到下一個文件位置,並同時返回當前文件名。但必須已經調用過POSITION CFileDialog::GetStartPosition( )來得到最初的POSITION變量
函數原型:
virtual int DoModal( );
返回值: IDOK 或者 IDCANCEL.如果返回了IDCANCEL,則可以調用Windows函數CommDlgExtendedError來檢測是否發生了錯誤
說明:
- 本函數用於顯示Windows通用顏色對話框並接收用戶的選擇.
- 如果想通過設置m_cc結構的各個成員來初始化不同的顏色對話框,應在對話框對象構造之后,調用DoModal之前進行.
- 在調用DoModal之后,可以調用其它的成員函數檢索設置信息和用戶輸入的信息
文件對話框編程
流程圖:

代碼樣例:
實現如下:
View Code
//創建字體對話框對象 CFileDialog dlg(true,0,0,OFN_OVERWRITEPROMPT|OFN_HIDEREADONLY,L"Cpp File(*.cpp)|*.cpp|Chart Files (*.txt)|*.txt|All Files (*.*)|*.*||"); //創建模態的字體對話框 if(IDOK==dlg.DoModal()) { //用選定的字體輸出文本 "字體顯示" CString str; CClientDC pDC(this); str = "文件全路徑: "; str += dlg.GetPathName(); pDC.TextOutW(10,50,str); }
創建一個 MFC 基於對話框工程,然后在對話框上拖一個 button 控件,如下圖所示,然后為 button 添加單擊事件響應函數,在函數添加以上代碼,后運行程序.

