The Tips for Developers > MSFlexGridを使用する

MSFlexGridを使用する(最終更新日 2003/05/06)

MSFlexGrid とサンプルの説明
MSFlexGrid はテーブルデータの表示・操作を行うことができる。

このコントロールは ActivX コントロールであるため、実行環境によっては適切に動作しない場合がある。
このときは、MSFlexGrid ActiveX コントロールを regsvr32 を使用して、実行環境に登録する必要がある。

以下では、コントロールに年表を表示し、行追加のボタンを押下することで、先頭に行を挿入するプログラムを作成する。
MSFlexGrid コントロールの挿入
適当なダイアログボックスプロジェクトで動くプログラムを作成する。
(これを応用してSDIやMDI上でコントロールを挿入することも可能である。)

ResourceView のダイアログボックスの画面上で右クリックをし、「ActiveX コントロールの挿入」を選択する。

表示される ActiveXコントロールの中から、「Microsoft FlexGrid Control, version 6.0」を選択する。

挿入されたコントロールを適当な大きさにし、確定する。

このコントロールを右クリックし、プロパティを選択し、不可視状態にしておく。
また、行追加ボタンを追加しておく。
MSFlexGrid クラスの設定
コントロールを右クリックし、ClassWizardを起動する。メンバ変数タグを選択し、MSFlexGrid のコントロールIDを選択する。
(例の場合は IDC_MSFLEXGRID1)

「変数の追加」ボタンを押下すると、"Microsoft FlexGrid Control, version 6.0" がプロジェクトに登録されていないため、Developer Studio が登録を行い、それに対するラップクラスを生成することを確認するメッセージボックスが表示される。
このメッセージボックスの「OK」ボタンを押下すると、下図のようなダイアログボックスが表示される。

「OK」ボタンを押下し、上記に表示されているクラスをプロジェクトに取り込む。
こののち、「メンバ変数の追加」ダイアログボックスが表示されるので、CMsFlexGrid クラスの変数を ダイアログボックスクラスに追加する。
コントロールの初期化とデータの追加
まず、MsFlexGrid コントロールの初期化を行う。
初期化を行う場所は、OK ボタンを押下したタイミングとする。(アプリケーションによっては、CDialog クラスの派生クラスの OnInitDialog 関数内で行ってもよい。)

初期化には Clear メソッドを使用する。
void CMSFlexGrid::Clear(void)
このメソッドを実行すると、コントロール内情報を初期化する。ただし、コントロール内の行・列の総数には影響しない。

行および列の総数を変更するために、SetRows メソッド、および SetCols メソッドを使用する。
void CMSFlexGrid::SetRows( long lValue)
void CMSFlexGrid::SetCols( long lValue)
lValue 行、または列の総数
各セル内の項目の内容を設定する場合は、SetTextMatrix メソッドを使用する。
void CMSFlexGrid::SetTextMatrix( long lRowIndex, long lColIndex, unsigned short* pString)
lRowIndex 対象セルの行位置
lColIndex 対象セルの列位置
pString 設定する文字列へのポインタ
列の幅を変更するために SetColWidth 関数を使用する。
void CMSFlexGrid::SetColWidth( long lNumber, long lValue)
lNumber 幅を変更する列位置
lValue 指定された列の幅(twip単位)
0の場合は不可視、-1の場合は規定値になる
これらを組み合わせて、OKボタンを押下した後、行列を設定し、データ行を追加する機能を以下のように作成する。
次に行追加ボタンが押下された場合の処理を追加する。

行追加は AddItem メソッドを使用し、次の書式になっている。
void CMSFlexGrid::AddItem( char *szString, VARIANT Value)
szString 行に追加する文字列
複数の列がある場合、列の区切り文字としてTAB文字(\t)を使用する
Value VARIANT型構造体
行を挿入する場合は、vt メンバに VT_I4 を編集し、lVal メンバに挿入したい行番号を編集する
以下は行追加ボタンを押下されたときに実行されるコードである。(ボタンID は IDB_ADDCOL)
サンプルはこちらから