首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計疑難解答

Visual C++ 6.0 將 CEdit 首行文字作為檔案儲存預設檔名

     編輯:程式設計疑難解答

實作需求

模仿 Word 行為:使用者編輯內容時,點擊「儲存」按鈕,CFileDialog 的預設檔名自動填入 CEdit 控制項的第一行文字。

核心代碼

void CApp2Dlg::OnButton1() 
{
    // 1. 取得第一行文字
    char buffer[201] = {0};
    int n = m_edit1.GetLine(0, buffer, 100); // 索引 0 為第一行
    buffer[n] = '\0'; // 確保字串結尾

    // 2. 建立儲存對話框,第三參數為預設檔名
    CFileDialog saveFile(
        FALSE,                   // FALSE = Save As 對話框
        _T(".txt"),              // 預設副檔名
        buffer,                  // 預設檔名 (來自 Edit 首行)
        OFN_CREATEPROMPT | OFN_PATHMUSTEXIST | OFN_OVERWRITEPROMPT,
        _T("Text Files (*.txt)|*.txt|All Files (*.*)|*.*||")
    );

    // 3. 顯示對話框
    if (saveFile.DoModal() == IDOK) {
        CString path = saveFile.GetPathName();
        // 執行實際儲存邏輯...
    }
}

關鍵點說明

  • GetLine(int nIndex, LPTSTR lpszBuffer, int nMaxLength):nIndex=0 取第一行,回傳實際複製字元數(不含換行符)。
  • 手動加 buffer[n] = '\0' 確保 C 風格字串結尾,避免殘留垃圾字元進入檔名。
  • CFileDialog 建構函式第三參數 lpszFileName 直接接受預設檔名指標。
  • 旗標 OFN_OVERWRITEPROMPT 覆蓋提示,OFN_PATHMUSTEXIST 路徑必須存在,提升易用性。

擴充:過濾非法檔名字元

CString strFileName = buffer;
strFileName.Replace(_T("\\"), _T(""));
strFileName.Replace(_T("/"), _T(""));
strFileName.Replace(_T(":"), _T(""));
strFileName.Replace(_T("*"), _T(""));
strFileName.Replace(_T("?"), _T(""));
strFileName.Replace(_T("\""), _T(""));
strFileName.Replace(_T("<"), _T(""));
strFileName.Replace(_T(">"), _T(""));
strFileName.Replace(_T("|"), _T(""));
// 再傳給 CFileDialog

避免使用者首行輸入包含路徑分隔符或保留字元導致儲存失敗。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved