WTL, CMenu: не получается добавить пункты меню
От: Аноним  
Дата: 13.07.04 17:47
Оценка:
Добрый день. Подскажите плиз что неправильно делаю. С с++ а уж тем более WTL дела ранее не имел, это усугубляет ситуацию. Вобщем застопорился на таком моменте: требуется при нажатии на кнопку тулбара показать popup меню. Если в меню пункты добавлять через LoadMenu из ресурсов — то работает все замечательно, а если использовать AppendMenu или InsertMenu — то нифига не получается. Вот вырезка из кода:

CMenu menuPopup;
menuPopup.CreatePopupMenu();
menuPopup.AppendMenu(MF_STRING, NULL, "test");
::TrackPopupMenu(menuPopup.GetSubMenu(0), TPM_LEFTALIGN | TPM_RIGHTBUTTON, rc.left, rc.bottom, 0, *this, NULL);


этот вариант не работает. Если вместо Append использовать Insert — тоже.
А если так:

CMenu menuPopup;
menuPopup.LoadMenu(IDR_MENU_DOWNLOAD);
::TrackPopupMenu(menuPopup.GetSubMenu(0), TPM_LEFTALIGN | TPM_RIGHTBUTTON, rc.left, rc.bottom, 0, *this, NULL);


то работает отлично.
Подскажите в чем принципиальная разница между InsertMenu(AppendMenu) и LoadMenu? Использовать LoadMenu естественно не катит, так как надо формировать пункты налету. Заранее спасибо.
Re: WTL, CMenu: не получается добавить пункты меню
От: Ovl Россия  
Дата: 13.07.04 17:56
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Добрый день. Подскажите плиз что неправильно делаю. С с++ а уж тем более WTL дела ранее не имел, это усугубляет ситуацию. Вобщем застопорился на таком моменте: требуется при нажатии на кнопку тулбара показать popup меню. Если в меню пункты добавлять через LoadMenu из ресурсов — то работает все замечательно, а если использовать AppendMenu или InsertMenu — то нифига не получается. Вот вырезка из кода:


А>
А>CMenu menuPopup;
А>menuPopup.CreatePopupMenu();
А>menuPopup.AppendMenu(MF_STRING, NULL, "test");
А>::TrackPopupMenu(menuPopup.GetSubMenu(0), TPM_LEFTALIGN | TPM_RIGHTBUTTON, rc.left, rc.bottom, 0, *this, NULL);
А>


А>этот вариант не работает. Если вместо Append использовать Insert — тоже.

А>А если так:

А>
А>CMenu menuPopup;
А>menuPopup.LoadMenu(IDR_MENU_DOWNLOAD);
А>::TrackPopupMenu(menuPopup.GetSubMenu(0), TPM_LEFTALIGN | TPM_RIGHTBUTTON, rc.left, rc.bottom, 0, *this, NULL);
А>


А>то работает отлично.

А>Подскажите в чем принципиальная разница между InsertMenu(AppendMenu) и LoadMenu? Использовать LoadMenu естественно не катит, так как надо формировать пункты налету. Заранее спасибо.
Read or Die!
Как правильно задавать вопросы
Как правильно оформить свой вопрос
Автор: anvaka
Дата: 15.05.06
Re[2]: WTL, CMenu: не получается добавить пункты меню
От: Ovl Россия  
Дата: 13.07.04 18:00
Оценка:
Ovl>Здравствуйте, Аноним, Вы писали:

А>>Добрый день. Подскажите плиз что неправильно делаю. С с++ а уж тем более WTL дела ранее не имел, это усугубляет ситуацию. Вобщем застопорился на таком моменте: требуется при нажатии на кнопку тулбара показать popup меню. Если в меню пункты добавлять через LoadMenu из ресурсов — то работает все замечательно, а если использовать AppendMenu или InsertMenu — то нифига не получается. Вот вырезка из кода:


байда получилась с сообщением.. ну да ладно..

LoadMenu загружает полностью меню из ресурсов. Удобно, если оно статическое.
Хотя не вижу особых проблем в том, чтобы менять загруженное меню динамически (правда я этого не делал).

Насчет обработчика кнопки — если динамически создаешь меню (менюшки), то нуно им присвоить ID, чтоб правильно обрабатывался WM_COMMAND. И обработчик естественно должен быть..
Read or Die!
Как правильно задавать вопросы
Как правильно оформить свой вопрос
Автор: anvaka
Дата: 15.05.06
Re[3]: WTL, CMenu: не получается добавить пункты меню
От: Alexey_D  
Дата: 13.07.04 19:49
Оценка:
Здравствуйте, Ovl, Вы писали:

Ovl>байда получилась с сообщением.. ну да ладно..


Ovl>LoadMenu загружает полностью меню из ресурсов. Удобно, если оно статическое.

Ovl>Хотя не вижу особых проблем в том, чтобы менять загруженное меню динамически (правда я этого не делал).

Ovl>Насчет обработчика кнопки — если динамически создаешь меню (менюшки), то нуно им присвоить ID, чтоб правильно обрабатывался WM_COMMAND. И обработчик естественно должен быть..



Добавлял обработчик. Это не помогает. Собственно по идее он и с обработчиком = NULL должен показываться в списке. Я даже separator пробовал добавлять в качестве эксперимента — пофигу.
Кстати пробовал сначала загрузить через LoadMenu, а потом добавить/изменить пункты — абсолютно ничего не меняется. Прямо наваждение какое то...
Re: WTL, CMenu: не получается добавить пункты меню
От: Юнусов Булат Россия  
Дата: 13.07.04 21:13
Оценка:
Здравствуйте, Аноним, Вы писали:

Смотрим в хауту сначала
http://rsdn.ru/article/qna/ui/mnushow.xml
Автор(ы): Александр Шаргин
Дата: 25.06.2001





А>Подскажите в чем принципиальная разница между InsertMenu(AppendMenu) и LoadMenu? Использовать LoadMenu естественно не катит, так как надо формировать пункты налету. Заранее спасибо.


Разница в выделенном
    CMenu menu;
    if(menu.LoadMenu(MAKEINTRESOURCE(IDR_USERS)))
    {
        CMenuHandle popupMenu = menu.GetSubMenu(0);
        m_CmdBar.TrackPopupMenu(popupMenu, TPM_LEFTALIGN|TPM_RIGHTBUTTON, pt.x, pt.y, NULL);
    }



        CMenu popupMenu(CreatePopupMenu());

        popupMenu.AppendMenu(MF_STRING, ID_USER_ADD, _T("&Add"));  
        popupMenu.AppendMenu(MF_STRING, ID_USER_DELETE, _T("&Delete"));  

        m_CmdBar.TrackPopupMenu(popupMenu, TPM_LEFTALIGN|TPM_RIGHTBUTTON, pt.x, pt.y, NULL);
Re: WTL, CMenu: не получается добавить пункты меню
От: Ovl Россия  
Дата: 13.07.04 21:30
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Подскажите в чем принципиальная разница между InsertMenu(AppendMenu) и LoadMenu? Использовать LoadMenu естественно не катит, так как надо формировать пункты налету. Заранее спасибо.


пример с LoadMenu & InsertMenu
http://rsdn.ru:80/File/17361/WTL_Menu.rar
Read or Die!
Как правильно задавать вопросы
Как правильно оформить свой вопрос
Автор: anvaka
Дата: 15.05.06
Re[2]: WTL, CMenu: не получается добавить пункты меню
От: Ovl Россия  
Дата: 13.07.04 21:56
Оценка:
Здравствуйте, Ovl, Вы писали:

Ovl>Здравствуйте, Аноним, Вы писали:


А>>Подскажите в чем принципиальная разница между InsertMenu(AppendMenu) и LoadMenu? Использовать LoadMenu естественно не катит, так как надо формировать пункты налету. Заранее спасибо.


Ovl>пример с LoadMenu & InsertMenu

Ovl>http://rsdn.ru:80/File/17361/WTL_Menu.rar

хотя тебе нужно popupmenu (сорри — не заметил сначала) , тем не менее надеюсь, что поможет
Read or Die!
Как правильно задавать вопросы
Как правильно оформить свой вопрос
Автор: anvaka
Дата: 15.05.06
Re: WTL, CMenu: не получается добавить пункты меню
От: rus blood Россия  
Дата: 14.07.04 06:45
Оценка:
Здравствуйте, Аноним, Вы писали:

А>
А>CMenu menuPopup;
А>menuPopup.CreatePopupMenu();
А>menuPopup.AppendMenu(MF_STRING, NULL, "test");
А>::TrackPopupMenu(menuPopup.GetSubMenu(0), TPM_LEFTALIGN | TPM_RIGHTBUTTON, rc.left, rc.bottom, 0, *this, NULL);
А>


У твоего меню нет сабменю.
Имею скафандр — готов путешествовать!
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.