WinXP SP2
VC++2005 SP1 MFC
VC++2005でのMsFlexgridの追加方法がわかりません。
最近までは、VC++6.0を使用しており、
MsFlexgridを追加しても、問題なく使用できていました。
VC6.0追加方法
http://hp.vector.co.jp/authors/VA014436/prg_memo/windows/vctips/004.html
しかし、2005では上記のような方法はなく、以下のように追加しました。
MSFLXGRD.OCX
MSFLXGRD.DEP
をC:\WINDOWS\system32にコピーし、
「ツールボックス アイテムの選択」→「COM コンポーネント」から、
MSFLXGRD.OCXを参照
以上で、ツールボックス上にMFが現れました。
しかし、ダイアログ上にMsFlexgridを貼り付け、
コントロール変数宣言。(変数名m_grid)
そして、m_grid.SetTextMatrix()などを記述して、ビルドするとエラーになりました。
また、変数名を付けた時にインクルードされる、
msflexgrid.h、cppの中身が6.0と2005では、全くことなりました・・・。
MsFlexgridの追加方法が駄目だったのでしょうか?
いったい、2005では、どうMsFlexgridを追加すればいいのでしょうか??
どなたか教えてください。
よろしくお願いします。
リソースエディタのダイアログの上で、右クリック
↓
ActiveXコントロールの挿入
↓
Microsoft FlexGrid Control, version 6.0 (SP6)
↓
追加されたFlexGridを選択して再度右クリック
↓
変数の追加
↓
「メンバの追加ウィザード」よりCMsflexgrid型の
コントロール変数を追加
(デフォルトはCMsflexgrid1となっている)
ウィザードがラッパークラスを自動作成するので、あとは
VC6同様にコーディングできるはずです。
>VC6同様にコーディングできるはずです。
はちょっと違いましたね。
put_XXXX
get_XXXX
となっているので、そこらへんは置き換えて対応してください。
てか、追加まではできていたのね。。。
>「ツールボックス アイテムの選択」→「COM コンポーネント」から、
>MSFLXGRD.OCXを参照
>以上で、ツールボックス上にMFが現れました。
問題は使い方で
>msflexgrid.h、cppの中身が6.0と2005では、全くことなりました・・・。
から、
>SetTextMatrix
は使えないことを察してもらいたかったですね。
全レスどおり
SetTextMatrix は put_TextMatrix です。
どうしてもわからなければ、
msflexgrid.hの各メソッド内のInvokeHelperを呼び出しているところの
第一引数の値をみて VC6のときのCMsflexGridクラスとVS2005のときのCMsflexGridクラ
スとの対応をとってみてください。
たとえば
(VC6 msflexgrid.cpp)
long CMSFlexGrid::GetRow()
{
long result;
InvokeHelper(0xa, DISPATCH_PROPERTYGET, VT_I4, (void*)&result, NULL);
return result;
}
に対応するメソッドは、InvokeHelperメソッドの第一引数 0xa を使っているものを
さがすと
(VS2005 msflexgrid.h)
long get_Row()
{
long result;
InvokeHelper(0xa, DISPATCH_PROPERTYGET, VT_I4, (void*)&result, NULL);
return result;
}
という具合に見つけれます。
いい忘れましたが、InvokeHelperの第一引数はget,putで同じ値を使っているので
そこらへんは考慮して対応してください。
(OleView.Exeで確認するのもありでしょう。
C:\Program Files\Microsoft Visual Studio 8\Common7\Tools\Binにあるはず)
>blueさん
御丁寧な回答ありがとうございます。
msflexgrid.hの中身が変わっていて、
SetTextMatrixが使えないことまでは、わかっていたんですが、
put_TextMatrixになっているとは、気がつきませんでした。
未熟でした・・・。
6.0と2005の違いを、再度確認したいと思います。
ありがとうございました。
余談ですが、
なぜ6.0と2005ヘッダーの中身や、関数名が変わってしまうんでしょう?
訂正です
>なぜ6.0と2005ヘッダーの中身や、関数名が変わってしまうんでしょう?
なぜ6.0と2005とでは、ヘッダーの中身や、関数名が変わってしまうんでしょう?
ラッパークラス上の関数名はActiveXコントロール側に定義があるわけではない為、
ラッパークラスをどのように定義するかはIDEに任されているからではないかと。
VisualStudio2005は、C#とかC++/CLIとか新しい言語が追加されて基本的な考え方の
部分でVC++6.0とは大幅に変わっていると思います。
この為、VS2005全体の実装と合わせる方向で実装が変更されたのではないかと思います。
本当の所はmicrosoftに聞いてみないとわかりませんけれど。