2012-01-19 171 views
4

我要讓這樣的Mozilla Firefox瀏覽器子菜單的子菜單:創建子菜單

Firefox->View->Toolbars

這是什麼樣,現在(我的程序):

Program->Menu->Sub Menu

但我希望它看起來像Firefox,當它有一個額外的菜單,當你有你的鼠標。

#define ID_SM 1 

LRESULT CALLBACK WindowProcedure (HWND hwnd, 
            UINT message, 
            WPARAM wParam, 
            LPARAM lParam) 
{ 
    switch (message) 
    { 
     case WM_CREATE: 
      HMENU hMenubar = CreateMenu(); 
      HMENU hMenu = CreateMenu(); 

      AppendMenu(hMenubar, MF_POPUP, (UINT_PTR)hMenu, "Menu"); 
      AppendMenu(hMenu, MF_STRING, ID_SM, "Sub Menu"); 

      /* Would I put it here? How? */ 

      SetMenu(hwnd, hMenubar); 
      break; 

     case WM_COMMAND: 
      if (LOWORD(wParam) == ID_SM) { 
       /* Not sure if this should be here, 
        cause I want it to pop up when you mouse over */ 
      } 
      break; 
    } 
} 
+0

這只是我,還是你的鏈接被破壞?我無法讓他們加載。 –

+0

@CodyGray只是你。 –

回答

8

你剛纔創建另一個菜單並追加它作爲一個子菜單。您可以通過調用AppendMenu function來完成此操作,只需將uFlags參數設置爲MF_POPUP,然後將該句柄作爲參數uIDNewItem傳遞給子菜單。

例如,像:

case WM_CREATE: 
    HMENU hMenubar = CreateMenu(); 
    HMENU hMenu = CreateMenu(); 
    HMENU hSubMenu = CreatePopupMenu(); 

    AppendMenu(hMenubar, MF_POPUP, (UINT_PTR)hMenu, "Menu"); 
    AppendMenu(hMenu, MF_STRING, ID_SM, "Sub Menu"); 
    AppendMenu(hMenu, MF_STRING | MF_POPUP, (UINT_PTR)hSubMenu, "Sub-Sub Menu"); 

    SetMenu(hwnd, hMenubar); 
    break; 

你不需要做任何特殊響應WM_COMMAND消息。當您將鼠標移到父菜單項上時,Windows將自動顯示彈出式菜單。但是,您當然需要處理子菜單上顯示的項目的命令。

+0

感謝您的幫助,我會嘗試 – Smarty57

3

首先,創建一個新菜單並添加項目。例如:

HMENU hSubmenu = CreatePopupMenu(); 
// Insert or append items to hSubmenu here 

然後追加創建的菜單到HMENU:

AppendMenu(hMenu, MF_POPUP | MF_STRING, (UINT_PTR)hSubmenu, "My Submenu");