none
VS2008でレジストリを使わない方法 RRS feed

  • 質問

  • WinXp VS2008でVC++ SP1 MFCを使用してMDIのアプリケーションを作っています。

    新規プロジェクトで自動で作成されるアプリケーションを実行すると
    レジストリに勝手にアプリケーション名でデータが書き込まれます。

    ペインの位置情報を記録しているようなのですがレジストリは使わず
    iniファイルを使用したいと思います。
    方法をご存じの方、教えて下さい。

    CMyApp::InitInstance()内に
    自動でSetRegistryKey()が記述されていますが
    コメントアウトしたらMainFrameのLoadFrameでアプリケーションエラーが発生します。

    宜しくお願い致します。
    2009年3月5日 0:31

回答

  • Feature Pack で追加された CWinAppEx はレジストリにガチガチに依存しています。
    ちょっと調べてみましたが、ini ファイルが使えるようにはなっていないようです。

    そのため、ini ファイルを使いたい場合は、CWinAppEx ではなく CWinApp を使うことになります。
    ただ、この場合は CFrameWndEx ではなく CFrameWnd を使わなければならないので、VC2008 で追加されたリボンのような新しい UI は使えません。

    新しくプロジェクトを作るときのウィザードで、プロジェクトのスタイルを MFC 標準にすると、UI を決めるところでクラシックメニューを選べるようになります。
    こうやって作ったシンプルな MFC アプリケーションは、CFramwWnd や CWinApp を使うようになっていますので、SetRegistryKey を削除すれば ini ファイルが使えるようになります。

    • 回答としてマーク nagareha 2009年3月6日 2:44
    2009年3月5日 2:25
  • zakioさん

    ご回答ありがとうございました。

    zakioさんの推察通り、CWinAppExを使用していました。

    iniファイルの使用はあきらめてレジストリの書き込みだけでも抑制しようと
    Load/SaveState()やLoad/StoreWindowPlacement()をオーバーライドしてみましたが
    MRU?等の情報は書き込まれてしまい一筋縄ではいかないようです。
    抑制するだけなら、試していませんがCleanState()で最後に掃除する手もありますね…

    ターゲットのアプリケーションをVS2008で作成する理由として
    CDockablePaneのようなUIも要望仕様に入っているので
    今回はレジストリ書き込みについて目をつぶろうと思います。

    今後のMFCの展開にアンチレジストリユーザーにも配慮した設計を期待します。。

    ありがとうございました!

    • 回答としてマーク nagareha 2009年3月6日 2:45
    2009年3月6日 2:43

すべての返信

  • Feature Pack で追加された CWinAppEx はレジストリにガチガチに依存しています。
    ちょっと調べてみましたが、ini ファイルが使えるようにはなっていないようです。

    そのため、ini ファイルを使いたい場合は、CWinAppEx ではなく CWinApp を使うことになります。
    ただ、この場合は CFrameWndEx ではなく CFrameWnd を使わなければならないので、VC2008 で追加されたリボンのような新しい UI は使えません。

    新しくプロジェクトを作るときのウィザードで、プロジェクトのスタイルを MFC 標準にすると、UI を決めるところでクラシックメニューを選べるようになります。
    こうやって作ったシンプルな MFC アプリケーションは、CFramwWnd や CWinApp を使うようになっていますので、SetRegistryKey を削除すれば ini ファイルが使えるようになります。

    • 回答としてマーク nagareha 2009年3月6日 2:44
    2009年3月5日 2:25
  • zakioさん

    ご回答ありがとうございました。

    zakioさんの推察通り、CWinAppExを使用していました。

    iniファイルの使用はあきらめてレジストリの書き込みだけでも抑制しようと
    Load/SaveState()やLoad/StoreWindowPlacement()をオーバーライドしてみましたが
    MRU?等の情報は書き込まれてしまい一筋縄ではいかないようです。
    抑制するだけなら、試していませんがCleanState()で最後に掃除する手もありますね…

    ターゲットのアプリケーションをVS2008で作成する理由として
    CDockablePaneのようなUIも要望仕様に入っているので
    今回はレジストリ書き込みについて目をつぶろうと思います。

    今後のMFCの展開にアンチレジストリユーザーにも配慮した設計を期待します。。

    ありがとうございました!

    • 回答としてマーク nagareha 2009年3月6日 2:45
    2009年3月6日 2:43