VC++でGridコントロールを使う

WinAPI対応VC++で広く使われていたMSFlexGridはVC++6.0でサポートを終了し、以降のVisual StudioではWinAPIアプリケーションに対して版権さえ認めていない状況です。現在ではActiveXコントロールの販売は無く、.Net版のみとなっています。VC++の凋落(大げさですか…)に一抹の寂しさを感じてしまいますね。

でもWinAPI対応アプリケーションの利用者にとってこれは困りものです。最新の環境で開発できないということはセキュリティ重視の昨今では大変な痛手です。なんとかしなければなりません。私も最近MSFlexGridを利用してVC++6.0で開発した製品を最新環境に移行する必要がありましたので、早速MSFlexGridの移行の障害に行き当たりました。

当方のとった対策は以下の通りです。

1) ActiveX版MSFlexGridの代替としてFlexGridForWindowsForms5.0Jを使用する。
2) FlexGridForWindowsForms5.0Jをラップする.Netコントロールを作成する。
3) VC++6.0をC++/CLIへ移行する。

ここでミソなのは2)のラップです。
これはFlexGridForWindowsForms5.0JがWinAPIでの開発を認めていないため、.Net版のラップが必要なのです。このラップコントロールはFlexGridForWindowsForms5.0Jに処理を完全依存し、利用者へメッセージを仲介するだけです。
また3)は.Netコントロールを利用するので、アプリケーションを混合モードで動作させる必要があるからです。因みにC++/CLIはC++言語のマネージ拡張です。

ラップコントロールのI/Fはマネージドで、それ以外の旧来仕様はアンマネージドで記述する必要があるので、少々頭が混乱するのが欠点ですね。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です