Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Использование Contex menu в ATL 
:(
    Опции темы
set1984
Дата 11.12.2007, 13:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 8
Регистрация: 7.7.2007

Репутация: нет
Всего: нет



Я хотел бы  использовать контекстное меню в своем ActiveX компоненте, написанного с использованием библиотеки ATL. Я включаю поддержку MFC классов и пытаюсь связать созданный мною ресур меню с MFC классом CMenu. Однако при вызове функции LoadMenu происходит сбой программы. В MFC проектах все работает нормально.... а при использовании ATL как я только не пробовал..... я решил это проблему создавая меню при помощи структуры MENUITEMINFO, но мне бы хотелось разобраться как можно сделать с файлом ресурсов.
Для примера вот код без создания ресура:

HMENU hMenu;

hMenu = CreatePopupMenu();
 if (NULL == hMenu)
  throw L"Can't create popup menu";


 MENUITEMINFO mii = {0};
 mii.cbSize = sizeof(MENUITEMINFO);
 mii.fMask = MIIM_TYPE | MIIM_ID | MIIM_STATE;
 mii.fType = MFT_STRING;
 mii.fState = MFS_ENABLED;
 mii.wID = 1;
 mii.dwTypeData = (LPSTR)"Refresh";

 if(FALSE == InsertMenuItem(hMenu, 0, TRUE, &mii))
  throw L"Can't insert menu item 1";

 mii.wID = 2;
 mii.dwTypeData = (LPSTR)"Sort...";
 if(FALSE == InsertMenuItem(hMenu, 1, TRUE, &mii))
 throw L"Can't insert menu item 2";

 mii.wID = 3;
 mii.dwTypeData = (LPSTR)"Reset";
 if(FALSE == InsertMenuItem(hMenu, 2, TRUE, &mii))
 throw L"Can't insert menu item 3";

 mii.wID = 4;
 mii.dwTypeData = (LPSTR)"Filter...";
 if(FALSE == InsertMenuItem(hMenu, 3, TRUE, &mii))
 throw L"Can't insert menu item 4";

 HWND hWnd = ::GetForegroundWindow();

 short nX;
 short nY;
 POINT pnt;
 GetCursorPos( &pnt);
 nX = (short) pnt.x;    
 nY = (short) pnt.y;

 UINT nID = TrackPopupMenu(
  hMenu, 
 TPM_LEFTALIGN  | TPM_RETURNCMD, 
  nX, nY, 0, hWnd, NULL);
 PostMessage(WM_NULL, 0, 0);
 
 if (nID==1) {
     MessageBox("1","1",MB_OK);    
 }
 if (nID==2) {
     MessageBox("2","2",MB_OK);    
 }
 if (nID==3) {
     MessageBox("3","3",MB_OK);    
 }
 if (nID==4) {
     MessageBox("4","4",MB_OK);    
 } 



А вот с ресурсом:

HMENU hMenu;
HMENU a1=::LoadMenu(GetModuleHandle(NULL),MAKEINTRESOURCE(IDR_MENUPOPUP));
 hMenu=GetSubMenu(a1,0); 
 //char buff[1000]="";
// sprintf_s(buff,sizeof(buff),"%s",a1);
// MessageBox(buff,"Error",MB_OK);

 HWND hWnd = ::GetForegroundWindow();

 short nX;
 short nY;
 POINT pnt;
 GetCursorPos( &pnt);
 nX = (short) pnt.x;    
 nY = (short) pnt.y;

 UINT nID = TrackPopupMenu(
  hMenu, 
  TPM_LEFTALIGN  | TPM_RETURNCMD, 
  nX, nY, 0, hWnd, NULL);
 PostMessage(WM_NULL, 0, 0);

Ошибка в строке 
LoadMenu(

Может кто поможет буду очень благодарен!!!!

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: COM/DCOM/ActiveX/ATL/CORBA | Следующая тема »


 




[ Время генерации скрипта: 0.0392 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.