[C++] C++/CLI を用いて、.NET 対応アプリケーションから MFC 対応クラスを使用する

このサンプルでは、MFC ベースのダイアログ ボックスを .NET から利用するために、C++/CLI を用いて、MFC ライブラリの初期化や、MFC が使用するリソースのモジュールの指定ほか、.NET 向けラッパー クラスを作ります。

 
 
 
 
 
(0)
Add to favorites
8/16/2011
E-mail Twitter del.icio.us Digg Facebook
Sign in to ask a question


  • FORM内子ウィンドウに対するキーボードフォーカス
    1 Posts | Last post February 23, 2013
    • Manamegement Form内にMFC CDialogを子ウィンドウとして配置した場合、子ウィンドウ内のコントロールにキーボードフォーカスは移動することはできるのでしょうか?
      
      例えば
      parentWnd = new CWnd();
      parentWnd->Attach( (HWND)this->Handle.ToInt32() ); // this Management Codeの Form
      
      で親となるCWndを作成
      
      myDialog = new CMyDialog(NULL);
      myDialog->Create( CMyDialog::IDD, parentWnd );
      
      とすることで、Form内にCMyDialogを配置できますが、
      CMyDialog内にコントロールはマウスイベントは受け付けるものの、キーボードフォーカスを設定出来ませんでした。
  • ビジュアルスタイルがクラシックになってしまう
    2 Posts | Last post November 28, 2012
    • C++/CLIから呼び出されたMFCコード内で開かれたDialogBoxのビジュアルスタイルがクラシック・スタイルになてしまいます(グラデーション角丸にならない)。本サンプルでもクラシック・スタイルになっているようですが、システムのスタイルを適用するにはどうしたら良いでしょうか?ちなみに当方の実験ではCDialogをCreate()してChild Windowとした場合も、クラシック・スタイルになってしまうようです。
    • MFCダイアログを呼び出すほうのEXEプロジェクト側にて(当該記事ではC#プロジェクト「CSConApp」)、アプリケーション マニフェスト ファイル (app.manifest) を追加し、以下の太字記述をそのファイルの追加すれば変更可能です。
       
      <?xml version="1.0" encoding="utf-8"?>
      <asmv1:assembly 
        manifestVersion="1.0" 
        xmlns="urn:schemas-microsoft-com:asm.v1" 
        xmlns:asmv1="urn:schemas-microsoft-com:asm.v1"
        xmlns:asmv2="urn:schemas-microsoft-com:asm.v2"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
       
        <!-- Windows のコモン コントロールとダイアログのテーマを有効にします (Windows XP 以降) -->
        <dependency>
          <dependentAssembly>
            <assemblyIdentity
                type="win32"
                name="Microsoft.Windows.Common-Controls"
                version="6.0.0.0"
                processorArchitecture="*"
                publicKeyToken="6595b64144ccf1df"
                language="*"
              />
          </dependentAssembly>
        </dependency>
      
      </asmv1:assembly>
      
      app.manifestファイルは、プロジェクトに「新しい項目」を追加するダイアログボックスから「アプリケーションマニフェストファイル」(app.manifest)を選択することにより追加可能です。