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

MFC 記事本:無需 CFileDialog 直接打開文件並顯示到 CEdit

     編輯:程式設計疑難解答

核心思路

將「讀取文件並顯示」邏輯封裝為獨立函數,命令行啟動與菜單打開均調用該函數。

實現步驟

1. 提取讀取函數

BOOL CMyDoc::LoadFile(const CString& path) {
    CFile file;
    if (!file.Open(path, CFile::modeRead | CFile::shareDenyWrite))
        return FALSE;
    CArchive ar(&file, CFile::load);
    CString content;
    ar.ReadString(content); // 或循環讀取
    ar.Close();
    file.Close();
    // 更新視圖
    POSITION pos = GetFirstViewPosition();
    while (pos) {
        CView* pView = GetNextView(pos);
        if (pView->IsKindOf(RUNTIME_CLASS(CMyView))) {
            ((CMyView*)pView)->SetEditText(content);
        }
    }
    return TRUE;
}

2. 命令行啟動處理

在 CWinApp::InitInstance 中:

CCommandLineInfo cmdInfo;
ParseCommandLine(cmdInfo);
if (cmdInfo.m_nShellCommand == CCommandLineInfo::FileOpen) {
    // cmdInfo.m_strFileName 即為雙擊文件傳入的路徑
    if (!pDoc->LoadFile(cmdInfo.m_strFileName))
        return FALSE;
}
if (!ProcessShellCommand(cmdInfo)) return FALSE;

3. 菜單「打開」命令

void CMyDoc::OnFileOpen() {
    CFileDialog dlg(TRUE, _T("txt"), NULL, OFN_HIDEREADONLY, _T("文本文件|*.txt||"));
    if (dlg.DoModal() == IDOK) {
        LoadFile(dlg.GetPathName());
    }
}

關鍵點

  • CCommandLineInfo 自動解析命令行參數,m_nShellCommand == FileOpen 表示雙擊文件關聯啟動。
  • 文檔/視圖架構下,文檔負責數據讀取,視圖負責顯示更新。
  • 同一 LoadFile 服務於命令行、菜單、拖放等多種入口。

總結

MFC 記事本直接打開文件的關鍵在於 命令行參數解析 + 文檔讀取邏輯復用。將核心讀取封裝為 LoadFile,實現「一處實現、多處調用」。

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