1

CChildFrame::OnCreate() でいくつかのドッキング可能なペインを作成しました。アプリケーションを初めて起動すると、それらが表示されます。2 回目にアプリケーションを起動すると、それらは作成されますが、スプリッターウィンドウは完全にクライアント領域の側面 (下と右) に対して表示されるため、表示されません。そのため、マウスを使用してスプリッターをクライアント領域に引き込み、ドッキング可能なウィンドウが再び表示されるようにする必要があります。アプリで File->New を実行すると、新しいクライアント ウィンドウが作成され、ドッキング可能なウィンドウが表示されます。SetRegistryKey(_T("61sakjgsajkdg")); を変更すると、レジストリに Windows レイアウトを保存することと関係があると思います。私のアプリの CWinApp 派生クラスで。再実行すると、最初に表示されます。(ただし、アプリを2回目に再起動するときはそうではありません)。これらのドッキング可能なウィンドウのレイアウトも保存するにはどうすればよいですか? したがって、アプリを再起動すると。彼らは見えますか?または、どうすればアプリを防ぐことができますか。ウィンドウのレイアウトを以前に保存したもので上書きする。LoadCustomState() および SaveCustomState() と関係がありますか?、これらのメソッドを実装する方法に関する情報が見つかりませんでした。私が何を意味するかを示すために、ここにデモプロジェクトへのリンクがあります:

http://www.4shared.com/file/237193472/c384f0f6/GUI60.html

アプリの 2 回目の起動時に CChildFrame クラスでこれらのドッキング可能なウィンドウを表示する方法を教えてもらえますか?

4

3 に答える 3

1

MFC Feature Packの新しいクラスはすべて、ウィンドウの状態がレジストリに保存されています。

その音からすると、を呼び出した後、おそらくCWinAppEx :: SetRegistryBase()を呼び出す必要があると思います。MSDNは、ここでステップ4でそれを説明しています(理由の詳細はほとんどまたはまったくありません) 。InitInstance()SetRegistryKey()

于 2010-03-09T02:11:37.813 に答える
1

SaveState() 呼び出しを CMainFrame::DestroyWindow() メソッドに入れる必要があると思います。これにより、SaveState() が呼び出されたときにメイン フレームの子ウィンドウがまだ破棄されません。
CMainFrame のデストラクタで SaveState() を使用しようとしましたが、子ペインが既に破棄されているため、一部のアサーションが渡されません。

于 2010-11-18T06:45:07.277 に答える
0

InitInstance で少し変更しました:

. . . if (!ProcessShellCommand(cmdInfo)) は FALSE を返します。

LoadState((CMainFrame*)AfxGetMainWnd(),_T("Settings4"));

// The main window has been initialized, so show and update it
pMainFrame->ShowWindow(m_nCmdShow);
pMainFrame->UpdateWindow();

. .

および:

CMainFrame::~CMainFrame() { theApp.SaveState((CMainFrame*)AfxGetMainWnd(),_T("Settings4")); }

これがその方法であるかどうかはわかりませんが、今のところ機能しています。これに関するコメントは大歓迎です。

于 2010-03-09T04:11:33.140 に答える