2015-05-11 62 views
1

我明白有一些函數可以很容易地編寫Windows註冊表,但是我發現,在使用嚮導創建的新MFC項目中,一些信息(如分隔欄位置,控件的可見性)會自動存儲(或者至少我沒有發現CWinApp ::在項目中寫入*調用)。由於我也有舊的項目沒有這種行爲,我需要弄清楚如何做到這一點沒有項目嚮導的幫助。請有人知道這是如何工作的?如何保存MFC應用程序的佈局設置?

回答

2

MFC控制狀態保存魔術發生在'新'MFC Feature Pack,特別是在SaveState方法中,例如CMFCToolBar::SaveState

要利用此優勢,您需要升級工具欄和菜單以使用較新的控件並將應用程序升級爲從CWinAppEx繼承。我建議您使用基於新MFC嚮導的應用程序作爲如何升級舊的MFC應用程序的指南。

大部分信息保存在CPane :: SaveState()中,因此如果你想保存某個組件的狀態,你需要使用派生自CPane的類。 (更多信息here是類層次結構)。

保存窗口狀態的過程是通過CFrameImpl :: OnClosingMainFrame()啓動的。該函數依次調用保存一些應用程序設置的CWinAppEx :: SaveState(),然後調用CMFCToolBar的所有實例(它們將自己添加到調用OnCreate的CMFCToolBars的全局列表中)。以類似的方式保存所有可停靠的窗格,但列表屬於您的主框架。然後保存主框架的位置和大小。 CViews和CFrameWnds不太受歡迎,因爲我發現並嘗試過,唯一保存的信息是可視性。

+0

嗯,你是對的。王國的馬...這將能夠閱讀我的MFC源代碼。 – Pyjong

+0

如果您想要一個程序來讀取/理解MFC源代碼,請嘗試類似Agent Ransack的代碼。 – snowdude

+0

Nah我只是懶惰,我最終讀了它,但謝謝你:)我可以編輯你的答案,添加一些信息,我發現並標記它接受? – Pyjong

0

我在那個時候以前用過。如果我正確地提醒它,則應在調用基類方法之前將所需的信息保存在覆蓋的CWinApp::ExitInstance()中,然後將其加載到CWinApp::InitInstance中。一定要允許默認值,因爲在第一次運行時,不會加載任何內容,並且不要忘記調用(或複製)基類。