정리

[MFC] Application Layout State - 레이아웃 상태(저장) 관련 내용

저장소/VC++
출처 :  http://surfree.egloos.com/10681365 


MS VS 2008부터 MFC Feature Pack을 지원합니다.

Doc-View 형태의 응용프로그램을 만들면 MFC Feature Pack에서 제공하는 OutlookBar 와 Docking Pane를 이용할 수 있습니다.

OutlookBar와 Docking Pane의 레이아웃은 자동으로 저장되고 로드 됩니다.

매우 편리한 기능이긴 하지만 또한 매우 불편한 기능입니다.

물론 이 레이아웃 상태에 대해서 커스터마이징을 할 수 있는 여지를 두었군요.

MFC Feature Pack으로 Doc-VIew 응용프로그램을 생성할 시 기본 App 클래스는

CWinApp에서 CWinAppEx로 변경됩니다.

CWinAppEx에서 이 상태 저장 및 복구를 하는 군요.

CWinAppEx의 메소드 중 다음 메소드를 주의해서 보시면 됩니다.

CleanState(): 레이아웃 상태를 모두 초기화 한다.
LoadState(): 레이아웃 상태를 로드한다.
SaveState(): 레이아웃 상태를 저장한다.

위와 같은 메소드가 있지만 CleanState() 정도가 유용하게 쓰일 수 있을 것 같습니다.

CWinAppEx를 상속받은 클래스의 InitInstance()에서

SetRegistryKey() 구문 다음에 CleanState()를 호출하면 항상 레이아웃이 초기화한 상태로 표시되게 됩니다.

레이아웃을 로드하는 시점은 ProcessShellCommand()에서 프레임워크상 자동으로 로딩되게 되어 있습니다.

또한 이 레이아웃 자동 저장이 필요없다면

CWinAppEx의 다음 메소드를 오버라이딩 합니다.

virtual void OnClosingMainFrame(CFrameImpl* pFrameImpl);

기본 동작은 SaveState() 메소드를 호출합니다.

그러므로 레이아웃 자동저장이 되지 않게 하기 위해서는 OnClosingMainFrame()메소드를 오버라이딩하여 빈 구문으로 놓으면 레이아웃이 자동으로 저장되지 않습니다.