顏色,文件和字體對話框(VC_MFC)


目錄 

顏色對話框
字體對話框
文件對話框

(本章節中例子都是用 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 添加單擊事件響應函數,在函數添加以上代碼,后運行程序.


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM