首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

MFC 通用對話框:檔案、顏色、字型對話框完整用法

     編輯:關於C語言

Windows 提供標準通用對話框,MFC 封裝為 `CFileDialog`、`CColorDialog`、`CFontDialog`。無需衍生新類,直接建構、呼叫 `DoModal()`,關閉後透過成員函數取得使用者選擇。本文詳細說明三大對話框的建構參數、回傳值獲取與進階選項。

CFileDialog:檔案開啟/儲存

CFileDialog(
    BOOL bOpenFileDialog,          // TRUE=開啟, FALSE=另存新檔
    LPCTSTR lpszDefExt = NULL,     // 預設副檔名
    LPCTSTR lpszFileName = NULL,   // 預設檔名
    DWORD dwFlags = OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,
    LPCTSTR lpszFilter = NULL,     // 檔案類型過濾器
    CWnd* pParentWnd = NULL        // 父視窗
);

過濾器字串格式:


"文字檔 (*.txt)|*.txt|所有檔案 (*.*)|*.*||"

「說明|模式」對用 `|` 分隔,同類多模式用 `;`,結尾雙 `||`。

取得使用者選擇

  • `GetPathName()`:完整路徑(含目錄與副檔名)
  • `GetFileName()`:僅檔名
  • `GetFileExt()`:副檔名
  • `GetFileTitle()`:不含副檔名的檔名
  • `GetStartPosition()` / `GetNextPathName(pos)`:多選模式下遍歷所有檔案

CColorDialog:顏色選擇


CColorDialog(COLORREF clrInit = 0, DWORD dwFlags = 0, CWnd* pParentWnd = NULL);
  • `clrInit`:預設顏色(RGB)
  • `dwFlags`:`CC_RGBINIT`(使用 clrInit)、`CC_FULLOPEN`(直接展開自訂顏色)、`CC_PREVENTFULLOPEN`(禁用自訂)
  • 關閉後:`GetColor()` 取得選擇的 `COLORREF`

CFontDialog:字型選擇


CFontDialog(LPLOGFONT lplfInitial = NULL,
            DWORD dwFlags = CF_EFFECTS | CF_SCREENFONTS,
            CDC* pdcPrinter = NULL, CWnd* pParentWnd = NULL);
  • `lplfInitial`:預設 `LOGFONT` 結構指標
  • `dwFlags`:`CF_EFFECTS`(顯示顏色/底線/刪除線)、`CF_SCREENFONTS`/`CF_PRINTERFONTS`/`CF_BOTH`(字型來源)
  • 關閉後:`GetCurrentFont(LOGFONT* plf)` 取得字型屬性,`GetColor()` 取得文字顏色

實戰範例:開啟檔案並套用字型


void CMyView::OnFileOpen() {
    CFileDialog dlg(TRUE, _T("txt"), NULL, OFN_FILEMUSTEXIST,
        _T("文字檔 (*.txt)|*.txt|所有檔案 (*.*)|*.*||"));
    if (dlg.DoModal() == IDOK) {
        CString path = dlg.GetPathName();
        // 讀取檔案...
    }
}

void CMyView::OnFormatFont() {
    LOGFONT lf;
    GetFont()->GetLogFont(&lf);  // 目前字型作為預設
    CFontDialog dlg(&lf, CF_EFFECTS | CF_SCREENFONTS);
    if (dlg.DoModal() == IDOK) {
        dlg.GetCurrentFont(&lf);
        CFont newFont;
        newFont.CreateFontIndirect(&lf);
        SetFont(&newFont);  // 套用至視窗/控制項
        Invalidate();
    }
}
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved