2014-02-18 122 views
0

我創建了一個使用CMFCToolBar和CMFCMenuBar的MFC應用程序。它保存了它的第一次項目狀態,當我改變或添加任何動態項目時,我仍然看到第一個狀態,刪除的項目停留在那裏,添加的項目不顯示,然後我發現所有項目都在註冊表中序列化並每次加載,我們所有的應用程序負載從應用程序的模塊的動態菜單項或工具欄按鈕,我真的不能做,除了用以下解決方案默認情況下,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; } 


}; 

,這是我可以用它來添加動態的唯一方式工作項目到工具欄或菜單欄,但這不是解決方案,我沒有利用定製工具和保存菜單欄的位置,這是微軟希望人們處理菜單和工具欄的方式嗎?推一次,不允許更改?或者我錯過了這件事?

回答

0

不幸的是,這是它的工作方式,因爲Microsoft從BCG工具包中派生出它的CMFC類。我們在應用程序中遇到了同樣的問題,並通過更新主機類的工作空間(例如工具欄,菜單項等)來解決此問題。另外,我們選擇將狀態保存在XML文件中。

+0

如何保存狀態是什麼狀態?它現在將它保存在註冊表中並加載它,但不會看到任何更新。我只是希望它看到更新新的變化,請解決這個問題,如果你已經解決了這個問題,讓答案更加清晰,併爲我們提供一些代碼或指導 – ahmedsafan86

+1

「狀態」是當前定位和包含所有工具欄,菜單,等當前定義給應用程序。您可以將其視爲「個人資料」。你可以有許多不同的'國家'。可以定義一個來保存工具欄的一個子集。無論何時工具欄被添加,更新等,我們都稱之爲保存「狀態」的方法。當應用程序打開時,狀態將使用loadstate方法進行恢復。關閉時,狀態會再次保存。確定如何以及何時想要管理應用程序中用戶界面對象的狀態真的取決於您。 – rrirower