7

MFC 機能パックで CDockablePane のキャプションを強制的に更新するにはどうすればよいですか? タブ付きのビジュアル スタジオ スタイルの例を使用していますが、タブのキャプションを変更したいと考えています。

ただし、これらはどこかにキャッシュされているようですが、デフォルトから変更すると、アプリが前回の実行で使用したものが使用されます。これに関するレジストリには何も見つかりません。

文字列テーブル IDS_FILE_VIEW および IDS_CLASS_VIEW を変更して、新しいキャプションを設定しています。CDockablePane::CreateEx メソッドに進みました。lpszCaption パラメーターには新しいキャプションが含まれていますが、古いキャプションがまだ使用されています。

新しいキャプションは、ペインを非表示にして再度表示するまで読み込まれないようです。ヒントになるはずなのですが、わかりません。

CreateEx のキャプションとして渡したものを使用しないのはなぜですか?

4

6 に答える 6

6

一言で言えば、これはMFC機能パックのバグです-実際にはBCGソフトウェアライブラリにあります。バグは、これらのキャプションを動的に変更できないことです。彼らの答えは「なぜあなたはそれをしたいのですか?」です。

ドッキング可能なペインのタブ付きペインのキャプションは、レジストリに保存されます。キャプションがレジストリにすでに存在する場合、作成時に使用されたキャプションは使用されません。

したがって、アプリケーションを初めて実行するときは、文字列テーブルのキャプションが使用されます。その後、レジストリのキャプションを使用します。

AppWizardによって作成された設定を使用すると、レジストリ設定は次のようになります。

HKEY_CURRENT_USER\Software\Local AppWizard-Generated Applications\MyApp\Workspace\DockingManager-128\DockingPaneAndPaneDividers

このキーに格納されている値は、基本的に、ドッキングマネージャーによる起動時にペインにシリアル化されるバイナリファイルです。内容は文書化されていませんが、コードが何をしているのかをafxdockablepane.cppで確認できます。

これがこの問題に遭遇した他の誰かに役立つことを願っています。

于 2010-02-23T21:58:31.350 に答える
2

うーん、誤解してしまいましたが、CDockablePane のインスタンスで 'SetWindowText' を呼び出すだけです。それのキャプションは、「SetWindowText」に渡すものに変わります...

于 2010-03-09T13:17:14.223 に答える
0

ウィンドウの名前は LoadState() 時にシリアル化されます。アプリのウィンドウ位置に関連するすべてのレジストリ情報を削除します。私の場合、HKCU\Software\My App Name にありました。

于 2010-11-19T00:12:02.270 に答える
0

私は同じ問題に遭遇しましたが、ここで提供されている解決策が気に入らないので、さらに進んで、 を参照してそのCDockingManagerメソッドを呼び出すことで、レジストリからの状態の読み込みを簡単に無効にできることがわかりました。DisableRestoreDockState

于 2013-06-06T15:23:16.783 に答える