程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> 小結一下win32 menu的使用:

小結一下win32 menu的使用:

編輯:C++入門知識

[cpp]   // 首先需要定義菜單的ID   #define IDM_FILE_NEW  40001      #define IDM_FILE_OPEN 40002      #define IDM_EDIT_COPY 40003      #define IDM_EDIT_CUT  40004      HMENU    hMenu;   HMENU     hMenuPop;      // Menu Append   hMenu = CreateMenu();       //主菜單,水平   hMenuPop = CreateMenu();    //下拉的菜單,垂直      AppendMenu(hMenuPop,MF_STRING,IDM_FILE_NEW,TEXT("New"));   AppendMenu(hMenuPop,MF_STRING,IDM_FILE_OPEN,TEXT("Open"));   AppendMenu(hMenu,MF_POPUP,(unsigned int)hMenuPop,TEXT("File"));      hMenuPop = CreateMenu();      AppendMenu(hMenuPop,MF_STRING,IDM_EDIT_COPY,TEXT("Copy"));   AppendMenu (hMenuPop, MF_SEPARATOR, 0,           NULL) ;   AppendMenu(hMenuPop,MF_STRING,IDM_EDIT_CUT,TEXT("Cut"));   AppendMenu(hMenu,MF_POPUP,(unsigned int)hMenuPop,TEXT("Edit"));// Menu Insert   InsertMenu(hMenu, 0, uTemp, IDM_EDIT_CUT+7, TEXT("NewAdd"));      SetMenu(hwnd, hMenu);       其他的都還好說,解釋一下InsertMenu(因為網上能查到的使用InsertMenu的部分,都是CMenu的),InsertMenu 的第一個參數是要插入的菜單HMENU;第二個參數為要參入的菜單項的位置,比如這裡的0代表插入到菜單New的前面(也就是最前面一項),1代表插入到New的後面(第二項);第三個參數指的是標志,一般指定UINT uTemp=MF_BYPOSITION | MF_POPUP就行;第四個參數指的是新菜單項的ID,這裡是IDM_EDIT_CUT+7; 第五個參數指的是要加入菜單項的name;   無論是AppendMenu好還是InsertMenu好,操作之後都要SetMenu到原來的hwnd那,才能使操作之後的菜單項生效。。   為什麼要有菜單的ID呢。。 我們來思考這樣的一個問題-----當我們想要處理菜單項事件的時候,用什麼來定位到想要處理的菜單項呢?   。。。   所以菜單項的ID還是挺重要的,因為我們需要在WM_COMMAND中通過這個ID來定位到某個菜單項:   [cpp]  LRESULT CALLBACK WndProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)   {       switch (message)       {       case WM_COMMAND:           switch (wParam)           {           case IDM_FILE_NEW:               MessageBox(hwnd, TEXT("this menu is IDM_FILE_NEW"), szAppName, MB_OK);               break;           case IDM_FILE_OPEN:               MessageBox(hwnd, TEXT("this menu is IDM_FILE_OPEN"), szAppName, MB_OK);               break;           default:               break;           }           break;                    case WM_DESTROY:           PostQuitMessage (0) ;           return 0 ;       }       return DefWindowProc (hwnd, message, wParam, lParam) ;   }       此總結配圖:

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved