VC++2005でのMSFlexgiridの追加方法 – プログラミング – Home

通知
すべてクリア

[解決済] VC++2005でのMSFlexgiridの追加方法


おぉお
 おぉお
(@おぉお)
ゲスト
結合: 18年前
投稿: 4
Topic starter  

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を追加すればいいのでしょうか??

どなたか教えてください。
よろしくお願いします。


引用未解決
トピックタグ
Blue
 Blue
(@Blue)
ゲスト
結合: 20年前
投稿: 1467
 

リソースエディタのダイアログの上で、右クリック

ActiveXコントロールの挿入

Microsoft FlexGrid Control, version 6.0 (SP6)

追加されたFlexGridを選択して再度右クリック

変数の追加

「メンバの追加ウィザード」よりCMsflexgrid型の
コントロール変数を追加
(デフォルトはCMsflexgrid1となっている)

ウィザードがラッパークラスを自動作成するので、あとは
VC6同様にコーディングできるはずです。


返信引用
Blue
 Blue
(@Blue)
ゲスト
結合: 20年前
投稿: 1467
 

>VC6同様にコーディングできるはずです。
はちょっと違いましたね。

put_XXXX
get_XXXX

となっているので、そこらへんは置き換えて対応してください。


返信引用
Blue
 Blue
(@Blue)
ゲスト
結合: 20年前
投稿: 1467
 

てか、追加まではできていたのね。。。
>「ツールボックス アイテムの選択」→「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;
}

という具合に見つけれます。


返信引用
Blue
 Blue
(@Blue)
ゲスト
結合: 20年前
投稿: 1467
 

いい忘れましたが、InvokeHelperの第一引数はget,putで同じ値を使っているので
そこらへんは考慮して対応してください。

(OleView.Exeで確認するのもありでしょう。
C:\Program Files\Microsoft Visual Studio 8\Common7\Tools\Binにあるはず)


返信引用
おぉお
 おぉお
(@おぉお)
ゲスト
結合: 18年前
投稿: 4
Topic starter  

>blueさん
御丁寧な回答ありがとうございます。

msflexgrid.hの中身が変わっていて、
SetTextMatrixが使えないことまでは、わかっていたんですが、
put_TextMatrixになっているとは、気がつきませんでした。
未熟でした・・・。

6.0と2005の違いを、再度確認したいと思います。
ありがとうございました。

余談ですが、
なぜ6.0と2005ヘッダーの中身や、関数名が変わってしまうんでしょう?


返信引用
おぉお
 おぉお
(@おぉお)
ゲスト
結合: 18年前
投稿: 4
Topic starter  

訂正です
>なぜ6.0と2005ヘッダーの中身や、関数名が変わってしまうんでしょう?
なぜ6.0と2005とでは、ヘッダーの中身や、関数名が変わってしまうんでしょう?


返信引用
PATIO
(@patio)
Famed Member
結合: 4年前
投稿: 2660
 

ラッパークラス上の関数名はActiveXコントロール側に定義があるわけではない為、
ラッパークラスをどのように定義するかはIDEに任されているからではないかと。
VisualStudio2005は、C#とかC++/CLIとか新しい言語が追加されて基本的な考え方の
部分でVC++6.0とは大幅に変わっていると思います。
この為、VS2005全体の実装と合わせる方向で実装が変更されたのではないかと思います。
本当の所はmicrosoftに聞いてみないとわかりませんけれど。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました