Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Системное программирование и WinAPI > Пример конструирования и работы с MENU ListControl


Автор: En_t_end 21.1.2006, 18:25
Нужен пример конструирования, обмена сообщениями с контекстным меню, созданным для ListControl. Поделитесь, плиз...

Автор: Fixin 21.1.2006, 21:01
Цитата(En_t_end @ 21.1.2006, 19:25 Найти цитируемый пост)

ListControl

Это который "listbox"? Сейчас посмотрим...

Автор: Aleksandor 21.1.2006, 22:50
Ну не знаю... у меня есть вот такой обработчик

Код

    case WM_CONTEXTMENU: 
   hPopupMenu=LoadMenu(hInst,MAKEINTRESOURCE(IDR_MENULIST));
   GetCursorPos(&mouse);
   hSubMenu=GetSubMenu(hPopupMenu,0);
   SetMenuDefaultItem(hSubMenu,IDM_PLAIN,FALSE);
   SetForegroundWindow(hwnd);            // To find out more, search for Q135788 in MSDN.
   TrackPopupMenuEx(hSubMenu,0,mouse.x,mouse.y,hwnd,NULL);
   PostMessage(hwnd,WM_NULL,0,0);
   DestroyMenu(hPopupMenu);
    return 0;

// сообщения от меню обрабатываются как обычно.....


и вот такой
Код

BOOL   OnRightClickContact(NMITEMACTIVATE *plvdi)
{
 DWORD menuID;
 HMENU hSubMenu, hPopupMenu;
 LVHITTESTINFO hittest;

//.............................
 ClientToScreen(hwndContactList,&hittest.pt);
 hPopupMenu=LoadMenu(hInst,MAKEINTRESOURCE(IDR_LISTMENU));
 hSubMenu=GetSubMenu(hPopupMenu,0);
 SetMenuDefaultItem(hSubMenu,IDM_REPLY,FALSE);
 SetForegroundWindow(hwndContactList);            // To find out more, search for Q135788 in MSDN.
 menuID=TrackPopupMenu(hSubMenu,TPM_LEFTALIGN|TPM_TOPALIGN|TPM_RETURNCMD,hittest.pt.x,hittest.pt.y,0,hwndContactList,NULL);

   switch (menuID) {

   case IDM_FAWOR:
//............................
  break;

  case IDM_SELECTALL:
//............................
  break;            
           default: break;       }

    
 DestroyMenu(hPopupMenu);
 return TRUE;
}

Автор: Fixin 21.1.2006, 23:02
Ну, вроде все как весгда.

Автор: Fixin 21.1.2006, 23:56
Можно через субкласс:
Код

LRESULT CALLBACK ListBoxProc(HWND hwnd, UINT Message,
                         WPARAM wParam, LPARAM lParam)
{
    switch (Message)
    {
    case WM_RBUTTONUP:
        {
            int index = SendMessage(hwnd, LB_ITEMFROMPOINT, 0, lParam);
            POINT point;
            point.x = LOWORD(lParam);
            point.y = HIWORD(lParam);
            ClientToScreen(hwnd, &point);
            HMENU hMenu = LoadMenu(hMainInstance, "MENU1");
            int menuid = TrackPopupMenu(hMenu, TPM_LEFTALIGN|TPM_TOPALIGN|TPM_RETURNCMD, point.x, point.y, 0, hwnd, 0);
            if (menuid == 2)
            {
                if (MessageBox(hwnd, "Are you sure you want to delete this element?", "Submition", MB_YESNO) == IDYES)
                {
                    ListBox_DeleteString(hwnd, index);
                }
            }
            DestroyMenu(hMenu);
        }
        break;
        default:
            return CallWindowProc(OldListBoxProc, hwnd, Message, wParam, lParam);
    }    
}
В прикрепленке все целиком, только что-то меню колбасит, поздно уже smile
Добавлено @ 23:57
В расширении буквы "а" нехватает smile

Автор: En_t_end 22.1.2006, 08:42
Вот такой глюк:

Автор: Aleksandor 22.1.2006, 10:57
А что это???

Автор: En_t_end 22.1.2006, 11:12
Aleksandor
Это якобы отображающееся меню на Листе. ЗЫ это вот оно справа, такое кастрированное. Уже и не знаю, что делать.

Автор: Aleksandor 22.1.2006, 11:29
А его РОДИТЕЛЬСКОЕ окно точно ListView??
IMHO его что-то затирает.

а пробовал
SetForegroundWindow(hwndListView);
типа
Код

hPopupMenu=LoadMenu(hInst,MAKEINTRESOURCE(IDR_MENULIST));
hSubMenu=GetSubMenu(hPopupMenu,0);
SetForegroundWindow(hwndListView);            

Автор: En_t_end 22.1.2006, 11:32
Похожая проблема:
http://pascal.sources.ru/cgi-bin/forum/YaBB.cgi?board=winapi;action=display;num=1048102287
Только нужно обязательно показать меню из шаблона.

Автор: En_t_end 22.1.2006, 12:37
Сенкс всем! Оказалось, надо было не просто тупо создать дерево меню с названием ветки(как делал я), а надо было ещё и и саму ветку сделать субменю.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)