Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Не получается создать меню иконки в трее 
V
    Опции темы
mrbrooks
Дата 18.6.2008, 11:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


трололомен
****


Профиль
Группа: Завсегдатай
Сообщений: 4259
Регистрация: 4.10.2006
Где: Дол Гулдур

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



Приветсвую. 
Основное приложение - диалоговое окно. 
Я его сворачиваю в трей. По щелчку правой кнопки мыши должно появиться контексное меню. 
Само меню создал в ресурсах. Не подскажите как его вызвать?

В MFC - приложение даже понятие не имею как взять дескриптор этого меню чтобы использовать его в TrackPopupMenu().

Обработчик щелчка правой кнопки мышки таков:
Код

POINT  pt;
GetCursorPos(&pt);
SetForegroundWindow(hWnd);
TrackPopupMenu(Дескриптор, TPM_RIGHTALIGN|TPM_RIGHTBUTTON,pt.x, pt.y, 0, hWnd, NULL);
PostMessage(hWnd,WM_NULL,0,0);


Подсобите плиз - как ресурс использовать.
PM MAIL   Вверх
mrbrooks
Дата 18.6.2008, 12:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


трололомен
****


Профиль
Группа: Завсегдатай
Сообщений: 4259
Регистрация: 4.10.2006
Где: Дол Гулдур

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



Решил использовать CMenu

Код

POINT  pt;
GetCursorPos(&pt);
SetForegroundWindow(hWnd);
CMenu menu;
menu.LoadMenu(IDR_MENU);
menu.GetSubMenu(0);
menu.TrackPopupMenu(TPM_RIGHTALIGN ,pt.x, pt.y, this);
PostMessage(hWnd,WM_NULL,0,0);


дык menu.LoadMenu(IDR_MENU) возвращает false !!! С какой стати то. Ведь в ресурсах меню с ID = IDR_MENU  есть!!! Порою MFC меня удивляет больше Бормана.

Элементарная вещь вроде бы а как то не получается.
PM MAIL   Вверх
voov
Дата 18.6.2008, 13:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Патамушта мы пилоты
**


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

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



Код

LRESULT CAgentDlg::OnIconNotify(WPARAM wp, LPARAM lp)
{
    if (lp == WM_LBUTTONDOWN) { // левый клик мышей - скрываем \ показываем главное окно

        ::ShowWindow(m_hWnd, SW_SHOWNORMAL);

        // удаляю иконку из SysTray при завершении приложения
        nf.hWnd = m_hWnd;
        nf.uID = NULL;
        nf.uFlags = NIF_ICON;
        nf.uCallbackMessage = NULL;
        nf.hIcon = NULL;
        Shell_NotifyIcon(NIM_DELETE, &nf);

    } else if (lp == WM_RBUTTONDOWN) { // правый клик мышей - выводим меню

        CMenu oMenu, *pPopupMenu;
        oMenu.LoadMenu(IDR_MENU1);
        pPopupMenu = oMenu.GetSubMenu(0);
        if (pPopupMenu) {
            POINT pt;
            GetCursorPos(&pt);
            pPopupMenu->TrackPopupMenu(TPM_RIGHTALIGN, pt.x, pt.y, this);
        }
    }

    return 0;
}


Здесь все должно быть понятно, но если будут вопросы - пиши.
PM MAIL   Вверх
mrbrooks
Дата 18.6.2008, 14:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


трололомен
****


Профиль
Группа: Завсегдатай
Сообщений: 4259
Регистрация: 4.10.2006
Где: Дол Гулдур

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



Спасибо имхо за участие smile  Но менюха из ресурсов упорно не хочет подгружаться через LoadMenu. Приходится изголяться следущим образом.

Код

POINT  pt;
GetCursorPos(&pt);
SetForegroundWindow(hWnd);
CMenu *menu = new CMenu;
menu->CreatePopupMenu();
menu->AppendMenu(MF_ENABLED,(UINT)menu->m_hMenu,L"mazafaca");
menu->GetSubMenu(0);
menu->TrackPopupMenu(TPM_RIGHTALIGN ,pt.x, pt.y, this);
PostMessage(hWnd,WM_NULL,0,0);


Гы. Теперь осталось перехватить событие менюхи какую кнопку нажал.  smile  Но не по людски это как то.
PM MAIL   Вверх
voov
Дата 18.6.2008, 15:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Патамушта мы пилоты
**


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

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



Цитата

Но менюха из ресурсов упорно не хочет подгружаться через LoadMenu

Все-таки, не подгружается или не отображается? 
Я не предупредил сразу, сорри, меню должно содержать корневой элемент, который не будет отображаться.
т.е. все меню состоит из одного попап элемента (он не будет отображен), а все что содержит этот элемент, будет показано как контекстное меню.
PM MAIL   Вверх
mrbrooks
Дата 19.6.2008, 08:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


трололомен
****


Профиль
Группа: Завсегдатай
Сообщений: 4259
Регистрация: 4.10.2006
Где: Дол Гулдур

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



Не подгружается. Возращает ложь сама функция.

ЗЫ. Но понимаешь в чем соль комрад - приложенние то писал под WinCE 4.2 smile ,маленького брата Маздая, на монстре eMbedded VC++ 4 . А там все не по людски. Но вопрос решился и это радует.
PM MAIL   Вверх
voov
Дата 19.6.2008, 09:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Патамушта мы пилоты
**


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

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



Цитата

Но вопрос решился и это радует

Ну это главное  smile 
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Visual C++/MFC/WTL | Следующая тема »


 




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


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

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