|
|
How to verify the bar state infoby Cristi Posea The ProblemIf you use Why? Because in the Well, since you are a MFC veteran, you already know how to fix this:
What about this? - You already shipped to billions of customers the CoolApp 1.0 with 2 toolbars. Now it's time for an upgrade - you will deliver CoolApp 2.0, which has only one big toolbar, or you changed the toolbar IDs. The new version will crash on a billion computers because of old profile settings, and you get a billion calls for tech support. Uh-oh! But I have this supper install package which verifies the existing profile or builds a brand new one, you'll say. Congratulations, and keep up the good work! This article is not for you, but you may read it anyway. The Solution1. Create a new member function in BOOL VerifyBarState(LPCTSTR lpszProfileName); 2. Add the function body to BOOL CMainFrame::VerifyBarState(LPCTSTR lpszProfileName) { CDockState state; state.LoadState(lpszProfileName); for (int i = 0; i < state.m_arrBarInfo.GetSize(); i++) { CControlBarInfo* pInfo = (CControlBarInfo*)state.m_arrBarInfo[i]; ASSERT(pInfo != NULL); int nDockedCount = pInfo->m_arrBarID.GetSize(); if (nDockedCount > 0) { // dockbar for (int j = 0; j < nDockedCount; j++) { UINT nID = (UINT) pInfo->m_arrBarID[j]; if (nID == 0) continue; // row separator if (nID > 0xFFFF) nID &= 0xFFFF; // placeholder - get the ID if (GetControlBar(nID) == NULL) return FALSE; } } if (!pInfo->m_bFloating) // floating dockbars can be created later if (GetControlBar(pInfo->m_nBarID) == NULL) return FALSE; // invalid bar ID } return TRUE; } 3. Finally, change the if (VerifyBarState(_T("MyApp"))) LoadBarState(_T("MyApp")); Optionally, you can add an Have fun! Copyright © 1998-2019 DataMekanix. All rights reserved.
|