2012-01-19 3 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 сообщение. Окно автоматически отображает всплывающее меню, когда вы наводите указатель мыши на элемент родительского меню. Однако вам, конечно, придется обрабатывать команды отображаемых элементов на подменю.

+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");