2015-05-09 87 views
4

我想學習一些基本的win32 api。我看到項目添加到菜單欄的教程都提到使用類似:Win32 API C++菜單欄

hMenubar = CreateMenu(); 
hMenu = CreateMenu(); 

AppendMenuW(hMenu, MF_STRING, IDM_FILE_NEW, L"&New"); 
AppendMenuW(hMenu, MF_STRING, IDM_FILE_OPEN, L"&Open"); 
AppendMenuW(hMenu, MF_SEPARATOR, 0, NULL); 
AppendMenuW(hMenu, MF_STRING, IDM_FILE_QUIT, L"&Quit"); 
AppendMenuW(hMenubar, MF_POPUP, (UINT_PTR)hMenu, L"&File"); 

但在VS2013的C++桌面默認的項目有一個文件和幫助菜單欄和內他們退出和版本信息。但他們所做的只是在WndProc中有這樣一個開關:

switch (message) 
    { 
    case WM_COMMAND: 
     wmId = LOWORD(wParam); 
     wmEvent = HIWORD(wParam); 
     // Parse the menu selections: 
     switch (wmId) 
     { 
     case IDM_ABOUT: 
      DialogBox(hInst, MAKEINTRESOURCE(IDD_ABOUTBOX), hWnd, About); 
      break; 
     case IDM_EXIT: 
      DestroyWindow(hWnd); 
      break; 
     default: 
      return DefWindowProc(hWnd, message, wParam, lParam); 
     } 
     break; 

我有幾個問題。它們是如何添加文件和幫助菜單欄以及菜單欄中的關於和退出項目而不使用createmenu()等的? IDM_ABOUT和IDM_EXIT是什麼意思?他們在菜單中有這些,但只是將它們放在switch語句中,將它們添加到菜單欄中?什麼是wmId和wmEvent,爲什麼在wmId上打開?實際上將這些項目添加到菜單欄是什麼?

如果你需要看我的節目更多的代碼,它只是一個非空C++ Win32項目在VS2013

感謝您的任何答案提供的,如果有人能在一個良好的方向指向我,它會被appreicated目前儘可能win32 api C++教程。

+0

',它將如果有人可以appreicated指向我的方向,儘可能好的當前win32 api C++教程'任何書由Charles Petzold。 – PaulMcKenzie

+0

非常感謝,我會檢查它 – shenk

回答

4

有兩種製作菜單的方法。它可以按照您所示的方式編程完成,也可以通過資源編輯器完成。在解決方案資源管理器中,雙擊帶* .rc擴展名的文件。您應該看到一個名爲「資源視圖」的窗口。打開資源節點,直到看到「菜單」。您可以添加/修改/刪除菜單項。你也可以製作對話框。

每個菜單項或對話框按鈕都有一個標識號,這個號碼通過WPARAM wParam。在上面的例子中wmEvent沒有使用,現在不用擔心。

是在資源文件#define IDM_ABOUT 101(或它可能是不同的數字)中定義的數字。當菜單項被點擊時,然後用該號碼發送消息。你可以捕捉到消息並對其作出迴應。

這是基本的WinApi,它在過去10年或20年內沒有太大變化,您在Google上找到的任何教程都是最新的。另外,當您使用資源編輯器創建新菜單項時,Visual Studio會自動創建一個ID並將其分配給該菜單項。你需要知道這些ID是什麼。你可以通過按F4鍵找到出現「屬性窗口」。

例如,如果您輸入一個新的菜單項「&文件新建」,該菜單的ID將類似於ID_FILE_NEWFILE,它應該在「屬性窗口」中可見。

此菜單項將與一樣。它被髮送到與該窗口關聯的Windows過程函數。

對於菜單項的消息:

  • message總是被設置爲WM_COMMAND
  • wParam是菜單ID
  • lParam不使用
+0

對於菜單它並不重要,因爲HIWORD(wParam)設置爲0,但值得記住的是控制/菜單ID編碼LOWORD(wParam)。 –