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

自製 Notepad 替代品:打造功能完整的文字編輯器

     編輯:關於VC++

程式執行效果圖

網路上找不到 VC++ 版 Notepad 原始碼,決定自行開發一個可替代系統記事本的程式。模仿 Windows 2000 版 Notepad 介面與功能,採用單文件架構、CEditView 為基底,副檔名關聯 .txt。

核心實作步驟

1. 專案建立與介面設定

  • AppWizard 建立單文件專案 Notepad,第 4 步進階設定副檔名為 txt
  • 移除工具列(系統 Notepad 無工具列)
  • 選單設計參照系統 Notepad,命令 ID 使用 VC 內建常數(如 ID_EDIT_COPY)
  • 新增「格式」→「字型」選單項目

2. 預設字型設定

在 CNotepadView 加入 CFont m_Font 成員,處理 WM_CREATE:

CEdit& edit = GetEditCtrl();
if (m_Font.m_hObject == NULL)
    m_Font.CreatePointFont(120, "Fixedsys"); // 12 點 Fixedsys
if (m_Font.m_hObject != NULL)
    edit.SetFont(&m_Font);
edit.SetTabStops(16); // 設定定位寬度

3. 字型對話框整合

void CNotepadView::OnFormatFont() {
    LOGFONT lf;
    CFont* font = GetEditCtrl().GetFont();
    if (font == NULL) {
        font = new CFont;
        font->CreatePointFont(120, "Fixedsys");
        font->GetLogFont(&lf);
        delete font;
    } else font->GetLogFont(&lf);

    CFontDialog dlg(&lf);
    if (dlg.DoModal() == IDOK) {
        m_Font.DeleteObject();
        m_Font.CreateFontIndirect(&lf);
        SetFont(&m_Font);
    }
}

4. 檔案關聯與系統整合

在 CNotepadApp::InitInstance() 修改登錄表關聯 .txt 檔案。執行後行為與系統 Notepad 一致。剩餘工作:關於對話框、圖示等修飾。

開發動機與隱藏功能

最初是為了綁定兩個檔案(非惡意用途),發現金山毒霸 2003 誤報病毒,靈機一動用極小的 Notepad 當載體在資源內嵌其他檔案。希望本程式能提供參考價值。

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