[引擎筆記]之二:創建資源以及菜單

1.資源概括

  • 資源最終將會被打包成.res文件。


- 自定義資源:
- 創建.rc文件和.h文件
myresource.h
myres.rc
- .h文件中定義資源的const id
eg. myresource.h中內容:

#define IDX_XXX 1000

- .rc文件中,引入.h,並且定義資源的類型和位置
eg.myres.rc文件中的內容
IDX_XXX     資源類型     資源名稱/資源全路徑
- 或者.rc文件中,使用名稱定義資源
eg.myres.rc文件中的內容
RES_NAME     資源類型     資源名稱/資源全路徑
- 加載資源
- 用字符串名字定義的
- 用ID定義的,使用MAKEINTRESOURCE(ID)

2.資源類型和資源加載

1 .ico圖標資源(ICON)

1.定義圖標資源
icon_name/ICON_ID     ICON     icoName.ico
2.加載圖標資源

    #include "myresource.h"
    LoadICON(hInstance,icon_name);                      // 資源定義的名稱是字符串
    LoadICON(hInstance,MAKEINTRESOURCE(ICON_ID));       // 資源用ID定義的
2 .cur光標資源(CURSOR)

1.定義光標資源資源
cur_name/CUR_ID     CURSOR     curName.ico
2.加載圖標資源

    #include "myresource.h"
    LoadCursor(hInstance,cur_name);                      // 資源定義的名稱是字符串
    LoadCursor(hInstance,MAKEINTRESOURCE(CUR_ID));       // 資源用ID定義的
3 字符串資源

1.定義字符串資源:在.rc文件中,格式爲:

STRINGTABLE
{
    ID_STRING_1, "string 1"
    ID_STRING_2, "string 2"
}

每條字符串資源長度不能超過255個字符。

2.加載字符串資源

    #include "myresource.h"
    int bufferCount=80;
    char load_str[bufferCount]
    LoadString(hInstance,
        ID_STRING_1,                // 字符串的id
        load_str,                   // 加載字符串的指針
        bufferCount                 // buffer的長度
        )
4 .WAV聲音資源(WAVE)

1.定義聲音資源
wave_name/WAVE_ID WAVE file_name.wav

2.加載/播放聲音資源

    #include "myresource.h"
    PlaySound("wave_name",hInstance,
        SND_XXX | SND_YYY);

    PlaySound(MAKEINTRESOURCE(WAVE_ID),hInstance,
        SND_XXX | SND_YYY);
    // 停止所有聲音
    PlaySound(NULL,hInstance,
        SND_PURGE);

3.菜單資源(MENU)

1.創建菜單資源

在.rc文件中,創建一個常見的菜單,包含File和Help

MainMenu  MENU  DISCRADABLE
{
    POPUP  "&File"
    {
        MENUITEM "Open",    MENU_FILE_ID_OPEN
        // ......

        MENUITEM "E&xit",    MENU_FILE_ID_EXIT
    }
    POPUP "Help"
    {
        MENUITEM "About",    MENU_FILE_ID_EXIT
    }
}
  • POPUP:彈出菜單
  • MENUITEM: 菜單項
  • 使用&符號,定義&後的字母爲Alt快捷鍵
    在myres.h中定義使用到的id:
#define  MENU_FILE_ID_OPEN    20000
#define  MENU_FILE_ID_XXXX    20000
// ......
2.加載菜單資源
  1. 方法1:Windows類winClass定義中:
    winClass.lpszMenuName = “MainMenu”
    winClass.lpszMenuName = MAKEINTRESOURCE(MAIN_MENU_ID)
  2. 方法2:先加載菜單資源,再賦值
    HMENU hMenu = LoadMenu(hInstance, "MainMenu");

或者:

    HMENU hMenu = LoadMenu(hInstance, MAKEINTRESOURCE(MAIN_MENU_ID));

賦值:
給hWnd賦值hMenu菜單

    SetMenu(hWnd,hMenu);
3.響應菜單事件(page 82)
  • 1.WM_COMMAND消息
    • 響應系統按鍵
    • 消息結構:msg、lparam、wparam
      對於響應菜單點擊事件:
      • msg:WM_COMMAND
      • lparam:發出消息的窗口句柄
      • wparam:選中的菜單項的ID(LOWORD(wparam))
  • 2.實例代碼
    在WinProc處理程序中:
case  WM_COMMAND:
{
    switch(LOWORD(wparam)
    {
        case MENU_FILE_ID_OPEN:
        {
            // clicked open
        }
        break;
        case MENU_FILE_ID_EXIT:
        {
            // clicked exit
        }
        break;

        // ......

    }
}
break;


轉載請註明作者及出處,本文作者爲延澈左
本文鏈接爲https://yanchezuo.com/en-9.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章