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

Win32 記事本開發實戰(一):菜單欄資源腳本編寫與加載

     編輯:關於C語言

Win32 記事本開發實戰(一):菜單欄資源腳本編寫與加載

本系列旨在從零開始使用純 Win32 API 模仿 Windows 記事本,實現外觀與功能的高度一致。第一步構建完整的菜單系統。

一、資源腳本文件設計

創建 menu.rc 文件,定義所有菜單項的命令 ID 與層級結構。參照系統記事本,菜單包含「文件」「編輯」「格式」「查看」「幫助」五大類。

命令 ID 定義規範

  • 主菜單:0x2000 起始
  • 文件菜單:0x41xx
  • 編輯菜單:0x42xx
  • 格式菜單:0x43xx
  • 查看菜單:0x44xx
  • 幫助菜單:0x45xx

完整 menu.rc 內容

// menu.rc
#define IDM_MAIN      0x2000
#define IDM_NEW       0x4101
#define IDM_OPEN      0x4102
#define IDM_SAVE      0x4103
#define IDM_SAVEAS    0x4104
#define IDM_SETTING   0x4105
#define IDM_PRINT     0x4106
#define IDM_EXIT      0x4107

#define IDM_UNDO      0x4201
#define IDM_CUT       0x4202
#define IDM_COPY      0x4203
#define IDM_PASTE     0x4204
#define IDM_DELETE    0x4205
#define IDM_FIND      0x4206
#define IDM_FINDNEXT  0x4207
#define IDM_REPLACE   0x4208
#define IDM_GOTO      0x4209
#define IDM_SELECTALL 0x4210
#define IDM_DATETIME  0x4211

#define IDM_WORDWRAP  0x4301
#define IDM_FONT      0x4302

#define IDM_STATUS    0x4401

#define IDM_HELP      0x4501
#define IDM_ABOUT     0x4502

IDM_MAIN MENU DISCARDABLE
BEGIN
    POPUP "文件(&F)"
    BEGIN
        MENUITEM "新建(&N)",           IDM_NEW
        MENUITEM "打開文件(&O)",       IDM_OPEN
        MENUITEM "保存(&S)",           IDM_SAVE
        MENUITEM "另存為(&A)",         IDM_SAVEAS
        MENUITEM SEPARATOR
        MENUITEM "頁面設置(&U)",       IDM_SETTING
        MENUITEM "打印(&P)",           IDM_PRINT
        MENUITEM SEPARATOR
        MENUITEM "退出(&E)",           IDM_EXIT
    END
    POPUP "編輯(&E)"
    BEGIN
        MENUITEM "撤銷(&U)",           IDM_UNDO, GRAYED
        MENUITEM SEPARATOR
        MENUITEM "剪切(&T)",           IDM_CUT, GRAYED
        MENUITEM "復制(&C)",           IDM_COPY, GRAYED
        MENUITEM "粘貼(&P)",           IDM_PASTE
        MENUITEM "刪除(&L)",           IDM_DELETE, GRAYED
        MENUITEM SEPARATOR
        MENUITEM "查找(&F)",           IDM_FIND, GRAYED
        MENUITEM "查找下一個(&N)",     IDM_FINDNEXT, GRAYED
        MENUITEM "替換(&R)",           IDM_REPLACE
        MENUITEM "轉到(&G)",           IDM_GOTO, GRAYED
        MENUITEM SEPARATOR
        MENUITEM "全選(&A)",           IDM_SELECTALL
        MENUITEM "時間日期(&D)",       IDM_DATETIME
    END
    POPUP "格式(&O)"
    BEGIN
        MENUITEM "自動換行(&T)",       IDM_WORDWRAP
        MENUITEM "字體(&T)",           IDM_FONT
    END
    POPUP "查看(&V)"
    BEGIN
        MENUITEM "狀態欄(&S)",         IDM_STATUS, GRAYED
    END
    POPUP "幫助(&H)"
    BEGIN
        MENUITEM "查看幫助(&H)",       IDM_HELP
        MENUITEM SEPARATOR
        MENUITEM "關於記事本(&A)",     IDM_ABOUT
    END
END

二、主程序加載菜單

在 WinMain 的窗口創建階段,通過 LoadMenu 載入菜單資源並關聯到窗口類:

HWND hwnd = CreateWindow(
    szAppName, 
    TEXT("無標題 - 記事本"),
    WS_OVERLAPPEDWINDOW,
    CW_USEDEFAULT, CW_USEDEFAULT,
    CW_USEDEFAULT, CW_USEDEFAULT,
    NULL,
    LoadMenu(hInstance, MAKEINTRESOURCE(IDM_MAIN)), // 關鍵:傳入菜單句柄
    hInstance,
    NULL
);

關鍵點解析

  1. MAKEINTRESOURCE(IDM_MAIN) 將整數 ID 轉換為資源字符串指針
  2. LoadMenu 返回菜單句柄 HMENU,作為 CreateWindow 的第 9 參數
  3. DISCARDABLE 標記允許系統在內存緊張時卸載菜單資源
  4. GRAYED 狀態表示菜單項初始禁用(如「撤銷」「剪切」需有編輯操作後啟用)

三、下一步預告

菜單骨架已就緒,後續將實現:

  • 編輯區創建(EDIT 控件子類化)
  • 文件操作:新建、打開、保存、另存為
  • 編輯命令:撤銷/重做、剪切/複製/粘貼、查找替換
  • 格式設置:自動換行、字體選擇
  • 狀態欄、頁面設置、打印對話框

敬請期待《Win32 記事本開發實戰(二):編輯控件與文件 IO》

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