изменить текст пунктов меню
От: _hunter Украина  
Дата: 15.05.06 13:18
Оценка:
Добрый день.

Пытаюсь изменить текст пунктов меню:
    CMenu* menu = new CMenu();
    menu->LoadMenu(IDR_TRAY_MENU);

    MENUITEMINFO iteminfo;
    iteminfo.cbSize = sizeof(MENUITEMINFO);
    iteminfo.fMask = MIIM_STRING;
    iteminfo.fType = MFT_STRING;

    iteminfo.dwTypeData = "11";
    menu->SetMenuItemInfo(ID_TRAYMENU_OPTIONS, &iteminfo, FALSE);

но текст почему-то не меняется. (IDR_TRAY_MENU и ID_TRAYMENU_OPTIONS -- правильные)

Чтьо я делаю не так?

С уважением...
Re: изменить текст пунктов меню
От: ekamaloff Великобритания  
Дата: 15.05.06 13:33
Оценка:
Здравствуйте, _hunter, Вы писали:

_>
_>    CMenu* menu = new CMenu();
    menu->>LoadMenu(IDR_TRAY_MENU);

_>    MENUITEMINFO iteminfo;
_>    iteminfo.cbSize = sizeof(MENUITEMINFO);
_>    iteminfo.fMask = MIIM_STRING | MIIM_TYPE;
_>    iteminfo.fType = MFT_STRING;

_>    iteminfo.dwTypeData = "11";
    menu->>SetMenuItemInfo(ID_TRAYMENU_OPTIONS, &iteminfo, FALSE);
_>


dwTypeData
Content of the menu item. The meaning of this member depends on the value of fType and is used only if the MIIM_TYPE flag is set in the fMask member.

... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
It is always bad to give advices, but you will be never forgiven for a good one.
Oscar Wilde
Re[2]: изменить текст пунктов меню
От: _hunter Украина  
Дата: 15.05.06 13:52
Оценка:
Здравствуйте, ekamaloff, Вы писали:

_>> iteminfo.fMask = MIIM_STRING | MIIM_TYPE;

E>[/q]
всеравно текст не изменяется...
Re[2]: изменить текст пунктов меню
От: ekamaloff Великобритания  
Дата: 15.05.06 15:02
Оценка:
Здравствуйте, ekamaloff, Вы писали:

Я сейчас посмотрел, как делал это в одном дельфевом проекте. В fMask я указывал MIIM_STRING, остальные поля — 0 (кроме cbSize и dwTypeData). На w2k все прекрасно работает.

И еще одна мысль — может у тебя проект юникодный?

В-общем может попробовать так:

_>>
_>>    CMenu* menu = new CMenu();
    menu->>>LoadMenu(IDR_TRAY_MENU);

_>>    MENUITEMINFO iteminfo = {0}; // Это наверное лишнее, но на всякий случай не помешает...
_>>    iteminfo.cbSize = sizeof(MENUITEMINFO);
_>>    iteminfo.fMask = MIIM_STRING;

_>>    iteminfo.dwTypeData = TEXT("11");
    menu->>>SetMenuItemInfo(ID_TRAYMENU_OPTIONS, &iteminfo, FALSE);
_>>
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
It is always bad to give advices, but you will be never forgiven for a good one.
Oscar Wilde
Re[3]: изменить текст пунктов меню
От: _hunter Украина  
Дата: 15.05.06 15:52
Оценка:
Здравствуйте, ekamaloff, Вы писали:

E>Здравствуйте, ekamaloff, Вы писали:


E>Я сейчас посмотрел, как делал это в одном дельфевом проекте. В fMask я указывал MIIM_STRING, остальные поля — 0 (кроме cbSize и dwTypeData). На w2k все прекрасно работает.


E>И еще одна мысль — может у тебя проект юникодный?


E>В-общем может попробовать так:

кажется обычный... а гже это глянуть можно?

_>>>
_>>>    CMenu* menu = new CMenu();
    menu->>>>LoadMenu(IDR_TRAY_MENU);

_>>>    MENUITEMINFO iteminfo = {0}; // Это наверное лишнее, но на всякий случай не помешает...
_>>>    iteminfo.cbSize = sizeof(MENUITEMINFO);
_>>>    iteminfo.fMask = MIIM_STRING;

_>>>    iteminfo.dwTypeData = TEXT("11");
    menu->>>>SetMenuItemInfo(ID_TRAYMENU_OPTIONS, &iteminfo, FALSE);
_>>>

не помогло...
Re: изменить текст пунктов меню
От: REFOT  
Дата: 15.05.06 19:08
Оценка:
Вот так у меня всё прекрасно работает


...
m_ActnMenuObject = GetSubMenu(m_MainMenuObject,0); 
...

MENUITEMINFO lpmii;       
lpmii.cbSize = sizeof(MENUITEMINFO);
lpmii.fMask  = MIIM_TYPE|MIIM_STATE;
lpmii.fType  = MFT_STRING;
lpmii.fState = MFS_ENABLED;
lpmii.dwTypeData = "Свойства";
lpmii.cch        = (UINT) strlen( lpmii.dwTypeData );
SetMenuItemInfo(m_ActnMenuObject,0,TRUE,&lpmii);
Re: изменить текст пунктов меню
От: VladFein США  
Дата: 16.05.06 06:15
Оценка:
Здравствуйте, _hunter, Вы писали:

_>Пытаюсь изменить текст пунктов меню:

_>
_>    CMenu* menu = new CMenu();
    menu->>LoadMenu(IDR_TRAY_MENU);
...
    menu->>SetMenuItemInfo(ID_TRAYMENU_OPTIONS, &iteminfo, FALSE);
_>

А где этот код находится? И что Вы потом делаете с menu?
Re: изменить текст пунктов меню
От: SeregaLBN Украина  
Дата: 16.05.06 06:55
Оценка:
Здравствуйте, _hunter, Вы писали:

_hunter>Пытаюсь изменить текст пунктов меню:

BOOL SetMenuString(HMENU hMenu, UINT uItem, BOOL bByPosition, LPCTSTR szNewText) {
   MENUITEMINFO miiGet = {sizeof(MENUITEMINFO), MIIM_TYPE};
   ::GetMenuItemInfo(hMenu, uItem, bByPosition, &miiGet);

   MENUITEMINFO mii = {sizeof(MENUITEMINFO), MIIM_TYPE, MFT_STRING | ((miiGet.fType & MFT_RADIOCHECK) ? MFT_RADIOCHECK : 0)};
   mii.dwTypeData = (LPTSTR)szNewText;
   return ::SetMenuItemInfo(hMenu, uItem, bByPosition, &mii);
}

CString GetMenuString(HMENU hMenu, UINT uItem, BOOL bByPosition) {
   TCHAR szName[MAX_PATH] = {0};
   int iRes = ::GetMenuString(hMenu, uItem, szName, MAX_PATH, bByPosition ? MF_BYPOSITION : MF_BYCOMMAND);
   return iRes ? szName : NULL;
}
Серёга, любит баранью ногу.
Re[2]: изменить текст пунктов меню
От: _hunter Украина  
Дата: 16.05.06 07:30
Оценка:
Здравствуйте, VladFein, Вы писали:

VF>А где этот код находится? И что Вы потом делаете с menu?

находится в обработчике WM_USER+1
ничего не делаю. это весь код
Re: изменить текст пунктов меню
От: Кирпа В.А. Украина  
Дата: 16.05.06 11:09
Оценка:
Здравствуйте, _hunter, Вы писали:

_>Добрый день.


_>Пытаюсь изменить текст пунктов меню:


коль мы в форуме MFC то имхо самый удобное место для изменения текста пункта меню
это обработчик ON_UPDATE_COMMAND_UI

Всего то и делов вызвать один метод CCmdUI::SetText()
!0xDEAD
Re[2]: изменить текст пунктов меню
От: _hunter Украина  
Дата: 16.05.06 12:47
Оценка:
Здравствуйте, Кирпа В.А., Вы писали:

КВА>коль мы в форуме MFC то имхо самый удобное место для изменения текста пункта меню

КВА>это обработчик ON_UPDATE_COMMAND_UI

КВА>Всего то и делов вызвать один метод CCmdUI::SetText()


у меня уже истерика начинается...
в BEGIN_MESSAGE_MAP добавил ON_UPDATE_COMMAND_UI(ID_TRAYMENU_OPTIONS, OnUpdateTraymenuOptions)
в OnUpdateTraymenuOptions пишу pCmdUI->SetText("123"); и ничего...
Re[3]: изменить текст пунктов меню
От: Кирпа В.А. Украина  
Дата: 16.05.06 13:34
Оценка:
Здравствуйте, _hunter, Вы писали:

_>Здравствуйте, Кирпа В.А., Вы писали:


КВА>>коль мы в форуме MFC то имхо самый удобное место для изменения текста пункта меню

КВА>>это обработчик ON_UPDATE_COMMAND_UI

КВА>>Всего то и делов вызвать один метод CCmdUI::SetText()


_>у меня уже истерика начинается...

_>в BEGIN_MESSAGE_MAP добавил ON_UPDATE_COMMAND_UI(ID_TRAYMENU_OPTIONS, OnUpdateTraymenuOptions)
_>в OnUpdateTraymenuOptions пишу pCmdUI->SetText("123"); и ничего...

Не верю ... Станиславский

Поставь бряк в отладчике
Ты туда попадаешь?
!0xDEAD
Re[3]: изменить текст пунктов меню
От: VladFein США  
Дата: 16.05.06 14:18
Оценка:
Здравствуйте, _hunter, Вы писали:

VF>>А где этот код находится? И что Вы потом делаете с menu?

_>находится в обработчике WM_USER+1
_>ничего не делаю. это весь код
В этом Ваша проблема: Вы загружаете меню с помощью LoadMenu, изменяете его и выбрасываете. Вы же не расчитываете что эти изменения будут сохранены в ресурсах?
Изменять нужно уже загруженное меню, перед тем как оно будет показано. Если это контекстное мену — то перед TrackPopupMenu.
Кстати, как Вы показываете это меню?
Re[3]: изменить текст пунктов меню
От: VladFein США  
Дата: 16.05.06 14:21
Оценка:
Здравствуйте, _hunter, Вы писали:

_>у меня уже истерика начинается...

А вот этого не надо...
_>в BEGIN_MESSAGE_MAP добавил ON_UPDATE_COMMAND_UI(ID_TRAYMENU_OPTIONS, OnUpdateTraymenuOptions)
_>в OnUpdateTraymenuOptions пишу pCmdUI->SetText("123"); и ничего...
Попробую угадать — Вы пишите диалоговое приложение?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.