2014-11-03 8 views
0

Весь день я пытаюсь решить эту простую проблему, но безуспешно. Я нашел много подсказок в интернете, но кажется, что ни одна из них не подходит для моей проблемы.Приложение MFC SDI, как изменить заголовок пункта меню?

Мой вопрос достаточно прост: я хочу, чтобы изменить заголовок в Menue элемента во время выполнения

Но, кажется, что все решения, которые я нашел очень специфичны.

Мои требования это: - это приложение MFC (VS2010) - это приложение SDI, не MDI - Я хочу, чтобы изменить заголовок основного пункта меню (например, «Файл»), а не запись подменю.

Из-за основного элемента входа для элемента меню нет идентификатора. Поэтому решения с ON_UPDATE_COMMAND_UI не будут работать!

Мои проблемы: - либо код, который я попробовал, порождает утверждение или исключение - или возвращения вызова функции с ложной - или функция, кажется, работает хорошо, но я не вижу никакого результата (caption по-прежнему не изменилось)

Возможно, я использую неправильные функции или неправильное место для вызова функций. Есть ли кто-нибудь пример, который будет работать в моих предварительных условиях?

Многие, огромное спасибо!

Ричард

+0

Изменить пункт меню, используя его индекс и в том число 'MF_BYPOSITION'. – user1793036

ответ

2

Windows, умело скрывает функцию для изменения меню под загадочными именем ModifyMenu. Я ненавижу, когда они так поступают. Действительно заставляет меня хотеть Linux/Unix, с хорошими ясными именами, такими как shmdt и mvwaddchnstr. Во всяком случай, сойдя мою мыльницу на данный момент, вы бы назвали это что-то вроде этого:

GetParentFrame()->GetMenu()->ModifyMenuW(1, MF_BYPOSITION, 0, L"New Item"); 
GetParentFrame()->Invalidate(); 
+0

Здравствуйте, я попробовал ваш код. Но это не удается. Откуда мне нужно называть это ModifyMenu()? Я добавил код в свой класс CFormView в OnInitialUpdate. Но вызов вызывает исключение :-( – NBGer