2005年05月09日
川俣晶の縁側ソフトウェア技術雑記total 9947 count

MFCアプリケーションで.NET Frameworkクラスライブラリにより描画する試行

Written By: 川俣 晶連絡先

 いい加減、こんな仕事に関係ない調べごとはやめなはれ、という感じですが。

 これが最後です!

MFCアプリケーションで.NET Frameworkクラスライブラリにより描画する §

 MFCアプリケーションのCViewを継承したビューのOnDrawハンドラで、.NET Frameworkクラスライブラリの機能を用いて描画行うというテストプログラムを書いてみました。

 使ったのは、Visual Stduio.NET 2003とManaged C++です。(C++/CLIではない)

サンプルソース (抜粋) §

 抜粋だけ掲載します。万一全体を見たいという奇特な人がいる場合は以下から入手してください。

サンプルソース(全て)

 なお、事前に、プロジェクトのプロパティから「マネージ拡張」を「はい」に切り替え、Managedコード アプリケーションに切り替えておく必要があります。

(前略)

#using <mscorlib.dll>

#using <System.dll>

#using <System.Drawing.dll>

#using <System.Windows.Forms.dll>

using namespace System;

using namespace System::Drawing;

using namespace System::Windows::Forms;

(中略)

void Cmfcdotnet001View::OnDraw(CDC* pDC)

{

    Cmfcdotnet001Doc* pDoc = GetDocument();

    ASSERT_VALID(pDoc);

    if (!pDoc)

        return;

#pragma push_macro ("new")

#undef new

    Graphics * g = Graphics::FromHdc(pDC->m_hDC);

    try

    {

        Font * font = __gc new Font(S"MS ゴシック",12);

        Brush * brush = __gc new SolidBrush( Color::Black );

        PointF position( 10.0, 10.0 );

        g->DrawString( S"Hello Mixed!", font, brush, position );

    }

    __finally

    {

        g->Dispose();

    }

#pragma pop_macro ("new")

}

(後略)

実行結果 §

 実行結果は割愛します。ウィンドウの左上に、黒字でHello Mixed!と表示されるはずです。

解説 §

 Windows APIの生DCを経由することで、MFCと.NET Frameworkクラスライブラリは意思疎通することができるわけです。

 つまり、pDC->m_hDCでMFCクラスから生DCの取得。

 Graphics::FromHdcを使うことで、生DCからGraphicsオブジェクトを生成できます。

 あとは好きなように描画してやれば良いわけですね。

 ちなみに、後始末はどのレベルまで必要になるかは詰め切れていません。GraphicsオブジェクトだけDisposeしていますが、フォントやブラシもDisposeした方が良いでしょう。

 #pragma push_macro ("new")と#undef newの役割は、MFCがnewをマクロで再定義していることが悪影響を及ぼすこと(ビルドエラーになる)への対策です。MFCアプリケーション内で__gc newする場合は前後をサンプルソースのようなコードで挟むと良いようです。

余談 §

 この結果は、とっくの昔に実現されていた技術に過ぎませんが、けっこう衝撃的です。

 MFCアプリケーションをManagedな世界に持ってこられると言うことは、そのようなソースコード資産に価値が生じるからです。

 さて、これが可能であるなら、CViewのウィンドウ上に.NET Frameworkのコントロールを貼り付けられるか、ということも調べてみましたが、これは残念ながら無理であるようですね。生DCを介して結び付くように、生HWNDを介して結び付かないかと思ったのですが、ちょっと無理っぽい……。

Facebook

キーワード【 川俣晶の縁側ソフトウェア技術雑記
【技術雑記】の次のコンテンツ
2005年
05月
09日
話題のEnterprise Libraryを体験! とりあえずConfiguration機能を試用!!
3days 0 count
total 8752 count
【技術雑記】の前のコンテンツ
2005年
05月
08日
.NET Frameworkで現在実行中のアセンブリのフルパス名を得る方法
3days 0 count
total 9282 count

このコンテンツを書いた川俣 晶へメッセージを送る

[メッセージ送信フォームを利用する]

メッセージ送信フォームを利用することで、川俣 晶に対してメッセージを送ることができます。

この機能は、100%確実に川俣 晶へメッセージを伝達するものではなく、また、確実に川俣 晶よりの返事を得られるものではないことにご注意ください。

このコンテンツへトラックバックするためのURL

https://mag.autumn.org/tb.aspx/20050509141822
サイトの表紙【技術雑記】の表紙【技術雑記】のコンテンツ全リスト 【技術雑記】の入手全リスト 【技術雑記】のRSS1.0形式の情報このサイトの全キーワードリスト 印刷用ページ

管理者: 川俣 晶連絡先

Powered by MagSite2 Version 0.36 (Alpha-Test) Copyright (c) 2004-2021 Pie Dey.Co.,Ltd.