2014-02-18 1 views
0

Я создал приложение MFC, которое использует CMFCToolBar и CMFCMenuBar. Он сохраняет состояние первого элемента времени, когда я изменяю или добавляю какие-либо динамические элементы. Я все еще вижу первое состояние, когда удаленные элементы остаются там, добавленные элементы не отображаются, тогда я обнаружил, что все элементы сериализуются в реестре и загружаются каждый раз, все наши приложений загружать динамические пункты меню или кнопку панели инструментов из модулей приложения, на самом деле я не мог заставить его работать за исключением следующего растворомCMFCToolBar & CMFCMenuBar не показывает динамические элементы по умолчанию

class CToolBarEx : public CMFCToolBar 
{ 
public: 
    CToolBarEx() 
    { 
    } 

    virtual BOOL LoadState(LPCTSTR /*lpszProfileName*/ = NULL, int /*nIndex*/ = -1, UINT /*uiID*/ = (UINT) -1) { return FALSE; } 
    virtual BOOL SaveState(LPCTSTR /*lpszProfileName*/ = NULL, int /*nIndex*/ = -1, UINT /*uiID*/ = (UINT) -1) { return FALSE; } 


}; 
class CMenuBarEx : public CMFCMenuBar 
{ 
public: 
    CToolBarEx() 
    { 
    } 

    virtual BOOL LoadState(LPCTSTR /*lpszProfileName*/ = NULL, int /*nIndex*/ = -1, UINT /*uiID*/ = (UINT) -1) { return FALSE; } 
    virtual BOOL SaveState(LPCTSTR /*lpszProfileName*/ = NULL, int /*nIndex*/ = -1, UINT /*uiID*/ = (UINT) -1) { return FALSE; } 


}; 

, который был единственным способом, которым я мог бы использовать, чтобы добавить динамическими элементы для панелей инструментов или меню, но это не решение, я не пользуюсь преимуществами инструментов настройки и сохранения позиций в меню, так как Microsoft хочет, чтобы люди имели дело с меню и панелями инструментов? нажимать его один раз и никаких изменений не допускается? или я что-то пропустил?

ответ

0

К сожалению, так оно и работает, так как Microsoft выводит классы CMFC из набора инструментов BCG. У нас была такая же проблема в нашем приложении, и она была решена путем обновления рабочего пространства (например, панели инструментов, пунктов меню и т. Д.) Из основного блока . Кроме того, мы решили сохранить состояние в XML-файле.

+0

Как сохранить состояние в каком состоянии? он сохраняет его в реестре прямо сейчас и загружает, но не видит никаких обновлений. Я просто хочу, чтобы обновления отображали новые изменения, пожалуйста, если вы решили эту проблему, сделайте ответ более понятным и предоставьте нам какой-то код или рекомендации. – ahmedsafan86

+1

«Состояние» - это текущее позиционирование и включение всех панелей инструментов, меню, и т. д., которые в настоящее время определены для приложения. Вы можете думать об этом как о «профиле». У вас может быть много разных «состояний». Можно задать сохранение подмножества панелей инструментов. Всякий раз, когда панель инструментов добавляется, обновляется и т. Д., Мы вызываем метод savestate для сохранения состояния. Когда приложение открывается, состояние восстанавливается с помощью метода loadstate. Когда он закрыт, состояние сохраняется снова. Вам решать, как и когда вы хотите управлять состоянием объектов пользовательского интерфейса в своем приложении. – rrirower

Смежные вопросы