TextGridCtrlライブラリは、MFC(Microsoft Foudation Class)拡張ライブラリであり、CWndから派生した、プレーンテキストのグリッドコントロールのクラスである。このライブラリは、Excelのようにグリッド上にテキストを入力できる他、グリッド数の設定や、選択部の切り取り・コピー・貼り付け機能を有する。
TextGridCtrlライブラリはC++言語で書かれており、ソースコードのほか、ダイナミックリンクライブラリ(*.dll)の形で提供される。ライセンスはオープンソースで、LGPL又はMPLのデュアルライセンスである。

▲デフォルトの見え方

▲選択して右クリックをし、「コピー」しようとしているところ。

▲切り取り・コピー・貼り付けは、Excelなどの表計算ソフトと互換している。
CTextGridCtrlは、MFCの拡張クラスであり、CWndより派生する。
CObject └CWnd └CTextGridCtrl
主にダイアログボックス内にコンボボックス同様に配置して使う。ただし、リソーススクリプト上では配置できないので、CDialog::OnCreateで手動で作成し、CDialog::OnInitDialogで手動で位置合わせする。ここではリソーススクリプト上でダミーのStaticを配置し、そこに手動でCTextGridCtrlを重ねる方法を示す。
class CTextGridCtrl143TestDlg : public CDialog {
...
CTextGridCtrl m_theTextGridCtrl;
...
};
int CTextGridCtrl143TestDlg::OnCreate (LPCREATESTRUCT lpCreateStruct) {
if (CDialog::OnCreate(lpCreateStruct) == -1) {
return -1;
}
// カラーコンボボックスの作成
m_theTextGridCtrl.Create (
WS_BORDER | WS_VISIBLE | WS_CHILD | WS_TABSTOP | WS_VSCROLL,
CRect (10, 10, 300, 300), this, IDC_COLOR_COMBO_BOX);
return 0;
}
BOOL CTextGridCtrl143TestDlg::OnInitDialog () {
CDialog::OnInitDialog();
...
// カラーコンボボックスの位置とサイズ調整
CRect rcStaticDummy;
CWnd* pStaticDummy = GetDlgItem (IDC_STATIC_DUMMY);
pStaticDummy->GetWindowRect (&rcStaticDummy);
this->ScreenToClient (&rcStaticDummy);
m_theTextGridCtrl.MoveWindow (&rcStaticDummy);
pStaticDummy->DestroyWindow ();
return TRUE;
}
関数リファレンスを参照してください。
上記の場合、m_theTextGridCtrlは親ウィンドウの破棄と同時に自動で行われるので、何もしなくてよい。
ソースコードで、Windows及びMFC関係のものを#includeしてから、#include "TextGridCtrl.h"をすること。ファイル名だけでなくヘッダーファイルのパスを通してくこと。
プロジェクトの設定-詳細で、「共有DLLでMFCを使う」「Unicode文字セットを使用する」を選択すること。
プロジェクトの設定-C/C++-プリプロセッサ-プリプロセッサの定義で、_UNICODE, UNICODEを有効にすること。
プロジェクトの設定-リンカ-入力-追加の依存ファイルで、"TextGridCtrl(d).lib"を追加すること。ファイル名だけでなく、パスを通しておくこと。
Visual Stuido 2015以降では、MFCはデフォルトのC/C++デスクトップ開発に付属しておりません。MFCをインストールしていない場合は、Visual Studio Intallerで、MFCのオプションを追加インストールする必要があります。
このライブラリを使った最小限のCTextGridCtrl143Testも別途配布しておりますので参考にしてください。
ドキュメントデータ(protected)
| 変数定義 | 解説 |
|---|---|
| int m_nNumRows; | 行数(グレータイトル行を含まない) |
| int m_nNumCols; | 列数(グレータイトル列を含まない) |
| int m_nTitleWidth; | タイトル部の幅[ドット] |
| int m_nTitleHeight; | タイトル部の高さ[ドット] |
| CUIntArray m_theColWidthArray; | 列幅配列[ドット] |
| CUIntArray m_theColHeightArray; | 列高さ配列[ドット] |
| CStringArray m_theRowTitleArray; | 行タイトルの文字列配列 |
| CStringArray m_theColTitleArray; | 列タイトルの文字列配列 |
| CStringArray m_theCellStringArray; | 各セルの文字列配列 |
非ドキュメントデータ(protected)
| 変数定義 | 解説 |
|---|---|
| int m_nCurRow; | 現在の行 |
| int m_nCurCol; | 現在の列 |
| int m_nVisibleTopRow; | 画面に表示されている最も上の行 |
| int m_nVisibleLeftCol; | 画面に表示されている最も左の列 |
| int m_nSelectedTopRow; | 選択されている最も上の行 |
| int m_nSelectedBottomRow; | 選択されている最も下の行 |
| int m_nSelectedLeftCol; | 選択されている最も左の行 |
| int m_nSelectedRightCol; | 選択されている最も右の行 |
一時的な状況保存用データ(protected)
| 変数定義 | 解説 |
|---|---|
| CPoint m_ptMouseDown; | マウスが押された座標 |
| CPoint m_ptMouseMove; | 最後にマウスが動かされた座標 |
| int m_nMouseMode; | |
| int m_nMouseDownRowBorder; | |
| int m_nMouseDownColBorder; | |
| int m_nKeyMoveRow; | |
| int m_nKeyMoveCol; | |
| int m_bCut; | |
| int m_nMouseDownRowHeight; | |
| int m_nMouseDownColWidth; |
描画オブジェクトなど(protected)
| 変数定義 | 解説 |
|---|---|
| CPen m_theGridPen; | グリッド描画用ペン |
| CPen m_theCurCellPen; | カレントセル描画用ペン |
| CBrush m_theWindowBackBrush; | ウィンドウ背景描画用ブラシ |
| CFont m_theTextFont; | 文字描画用フォント |
| CTextGridEdit m_theTextBox; | テキスト入力時だけVisibleになるテキストボックス |
| CMenu m_theContextMenu; | 右クリック用のコンテキストメニュー |
| 関数定義 | 引数 | 戻り値 | 解説 |
|---|---|---|---|
| int GetNumRows () const; | なし | グリッド行数 | グリッド行数を取得する。 |
| int GetNumCols () const; | なし | グリッド列数 | グリッド列数を取得する。 |
| BOOL SetNumRows (int nNumRows); | nNumRows:新しい行数 | 正常終了:TRUE, 異常終了:FALSE | グリッド行数を設定する。設定された新しい行数に従いアトリビュートを更新する。また、画面を更新する。 |
| BOOL SetNumCols (int nNumCols); | nNumCols:新しい列数 | 正常終了:TRUE, 異常終了:FALSE | グリッド行数を設定する。設定された新しい列数に従いアトリビュートを更新する。また、画面を更新する。 |
| int GetTitleHeight () const; | なし | タイトル行の高さ | タイトル行の高さを取得する。 |
| int GetTitleWidth () const; | なし | タイトル列の幅 | タイトル列の幅を取得する。 |
| BOOL SetTitleHeight (int nHeight); | nHeight:高さ | 正常終了:TRUE, 異常終了:FALSE | タイトル行の高さを設定する。設定された新しい高さに従いアトリビュートを更新する。また、画面を更新する。 |
| BOOL SetTitleWidth (int nWidth); | nWidth:幅 | 正常終了:TRUE, 異常終了:FALSE | タイトル列の幅を設定する。設定された新しい幅に従いアトリビュートを更新する。また、画面を更新する。 |
| int GetRowHeight (int nRow) const; | nRow:行番号(0オリジン) | 指定行の幅 | 指定行の高さを取得する。 |
| int GetColWidth (int nCol) const; | nRow:列番号(0オリジン) | 指定列の幅 | 指定列の幅を取得する。 |
| BOOL SetRowHeight (int nRow, nHeight); | nRow:行番号(0オリジン) | 正常終了:TRUE, 異常終了:FALSE | 指定行の高さを設定する。設定された新しい高さに従いアトリビュートを更新する。また、画面を更新する。 |
| BOOL SetColWidth (int nCol, int nWidth); | nCol:列番号(0オリジン) | 正常終了:TRUE, 異常終了:FALSE | 指定列の幅を設定する。設定された新しい幅に従いアトリビュートを更新する。また、画面を更新する。 |
| int GetCellSumHeight () const; | なし | セル部(タイトル部を除く)の合計高さ | セル部(タイトル部を除く)の合計高さを取得する。 |
| int GetCellSumWidth () const; | なし | セル部(タイトル部を除く)の合計幅 | セル部(タイトル部を除く)の合計幅を取得する。 |
| CString GetRowTitle (int nRow) const; | nRow:行番号(0オリジン) | タイトル文字列 | 指定列のタイトル文字列を取得する。 |
| CString GetColTitle (int nCol) const; | nCol:列番号(0オリジン) | タイトル文字列 | 指定行のタイトル文字列を取得する。 |
| CString GetCellString (int nRow, int nCol) const; | nRow:行番号(0オリジン)、 nCol:列番号(0オリジン) |
セル文字列 | 指定行・指定列のセル文字列を取得する。 |
| BOOL SetRowTitle (int nRow, CString strRowTitle); | nRow:行番号(0オリジン), strRowTitle:タイトル文字列 |
正常終了:TRUE, 異常終了:FALSE | 指定行のタイトル文字列を設定する。設定された新しい文字列に従いアトリビュートを更新する。また、画面を更新する。 |
| BOOL SetColTitle (int nCol, CString strColTitle); | nCol:列番号(0オリジン), strColTitle:タイトル文字列 |
正常終了:TRUE, 異常終了:FALSE | 指定列のタイトル文字列を設定する。設定された新しい文字列に従いアトリビュートを更新する。また、画面を更新する。 |
| BOOL SetCellString (int nRow, int nCol, CString strGridString); | nRow:行番号(0オリジン)、 nCol:列番号(0オリジン) strGridString:セル文字列 |
正常終了:TRUE, 異常終了:FALSE | 指定行・指定列のセル文字列を設定する。設定された新しい文字列に従いアトリビュートを更新する。また、画面を更新する。 |
| void DeleteAllRowTitle (); | なし | なし | すべての行のタイトル文字列を削除する。 |
| void DeleteAllColumnTitle (); | なし | なし | すべての列のタイトル文字列を削除する。 |
| void DeleteAllCellString (); | なし | なし | すべてのセルの文字列を削除する。 |
| BOOL InsertRow (int nRow); | nRow:行番号(0オリジン) | 正常終了:TRUE, 異常終了:FALSE | 未実装。 |
| BOOL InsertCol (int nCol); | nCol:列番号(0オリジン) | 正常終了:TRUE, 異常終了:FALSE | 未実装。 |
| BOOL RemoveRow (int nRow); | nRow:行番号(0オリジン) | 正常終了:TRUE, 異常終了:FALSE | 未実装。 |
| BOOL RemoveCol (int nCol); | nCol:列番号(0オリジン) | 正常終了:TRUE, 異常終了:FALSE | 未実装。 |
| BOOL GetSelectedArea (int* pRow1, int* pRow2, int* pCol1, int* pCol2); | pRow1:上行番号格納領域 pRow2:下行番号格納領域 pCol1:左列番号格納領域 pCol2:右列番号格納領域 |
正常終了:TRUE, 異常終了:FALSE | 選択範囲を取得する。 |
| BOOL SelectCell (int nRow, int nCol); | nRow:行番号(0オリジン) nCol:列番号(0オリジン) |
正常終了:TRUE, 異常終了:FALSE | 指定のセルを選択する。新しい選択範囲に従いアトリビュートを更新する。また、画面を更新する。 |
| BOOL SelectArea (int nRow1, int nRow2, int nCol1, int nCol2); | nRow1:上行番号(0オリジン) nRow2:下行番号 nCol1:左列番号 nCol2:右列番号 |
正常終了:TRUE, 異常終了:FALSE | 任意の矩形範囲を選択する。新しい選択範囲に従いアトリビュートを更新する。また、画面を更新する。 |
| BOOL SelectRow (int nRow1, int nRow2); | nRow1:上行番号(0オリジン) nRow2:下行番号 |
正常終了:TRUE, 異常終了:FALSE | 任意の行範囲を選択する。新しい選択範囲に従いアトリビュートを更新する。また、画面を更新する。 |
| BOOL SelectCol (int nCol1, int nCol2); | nCol1:左列番号(0オリジン) nCol2:右列番号 |
正常終了:TRUE, 異常終了:FALSE | 任意の列範囲を選択する。新しい選択範囲に従いアトリビュートを更新する。また、画面を更新する。 |
| BOOL SelectAll (); | なし | 正常終了:TRUE, 異常終了:FALSE | すべてのセルを選択する。新しい選択範囲に従いアトリビュートを更新する。また、画面を更新する。 |
| BOOL IsSelectedCell (int nRow, int nCol) const; | nRow:行番号(0オリジン) nCol:列番号(0オリジン) |
はい:TRUE, いいえ:FALSE | 指定したセルは選択されているかを返す。 |
| BOOL IsSelectedRow (int nRow) const; | nRow:行番号(0オリジン) | はい:TRUE, いいえ:FALSE | 指定した行はすべて選択されているかを返す。 |
| BOOL IsSelectedCol (int nCol) const; | nCol:列番号(0オリジン) | はい:TRUE, いいえ:FALSEE | 指定された列はすべて選択さえているかを返す。 |
| BOOL IsSelectedAll () const; | なし | はい:TRUE, いいえ:FALSEE | すべてのセルが選択されているかを返す。 |
| int GetCurRow () const | なし | カレント行番号(0オリジン) | カレント行番号を取得する。 |
| int GetCurCol () const | なし | カレント列番号(0オリジン) | カレント列番号を取得する。 |
| BOOL SetCurCell (int nRow, int nCol); | nRow:行番号(0オリジン) nCol:列番号(0オリジン) |
正常終了:TRUE, 異常終了:FALSE | 現在のカレントセルを設定する。新しい設定位置に従いアトリビュートを更新する。また、画面を更新する。カレントセルがはみ出した位置にある場合は自動的にスクロールする。 |
| BOOL AutoScrolltoShowCell (int nRow, int nCol, long lLogPixelsX, long lLogPixelsY); | nRow:行番号(0オリジン) nCol:列番号(0オリジン) lLogPixelX:Windowsの高DPI表示設定値X(100%=96) lLogPixelY:Windowsの高DPI表示設定値Y(100%=96) |
正常終了:TRUE, 異常終了:FALSE | 指定したセルが見えるように自動スクロールする。この関数は内部的に呼び出される。 |
| BOOL AutoScrolltoShowRow (int nRow, long lLogPixelsX, long lLogPixelsY); | nRow:行番号(0オリジン) lLogPixelX:Windowsの高DPI表示設定値X(100%=96) lLogPixelY:Windowsの高DPI表示設定値Y(100%=96) |
正常終了:TRUE, 異常終了:FALSE | 指定した行が見えるように自動スクロールする。この関数は内部的に呼び出される。 |
| BOOL AutoScrolltoShowCol (int nCol, long lLogPixelsX, long lLogPixelsY); | nCol:列番号(0オリジン) lLogPixelX:Windowsの高DPI表示設定値X(100%=96) lLogPixelY:Windowsの高DPI表示設定値Y(100%=96) |
正常終了:TRUE, 異常終了:FALSE | 指定した列が見えるように自動スクロールする。この関数は内部的に呼び出される。 |
| BOOL IsReadOnly () const; | なし | はい:TRUE, いいえ:FALSE | セルは読み込み専用(ユーザー入力不可か)を返す。 |
| BOOL SetReadOnly (BOOL bReadOnly = TRUE); | bReadOnly:読み込み専用にするときはTRUE, しないときはFALSE | 正常終了:TRUE, 異常終了:FALSE | セルは読み込み専用(ユーザー入力不可か)を設定する。読み込み専用の場合セル部背景はグレーになる。 |
| BOOL IsRowHeightFixed () const; | なし | はい:TRUE, いいえ:FALSE | 行高さは固定か(ユーザー調整不可か)を返す。 |
| BOOL SetRowHeightFixed (BOOL bRowHeightFixed = TRUE); | bRowHeightFixed:固定するときはTRUE, しない時はFALSE | 正常終了:TRUE, 異常終了:FALSE | 行高さは固定か(ユーザー調整不可か)を設定する。 |
| BOOL IsColWidthFixed () const; | なし | はい:TRUE, いいえ:FALSE | 列幅さは固定か(ユーザー調整不可か)を返す。 |
| BOOL SetColWidthFixed (BOOL bRowHeightFixed = TRUE); | bRowHeightFixed:固定するときはTRUE, しない時はFALSE | 正常終了:TRUE, 異常終了:FALSE | 列幅は固定か(ユーザー調整不可か)を設定する。 |
| ヴァージョン | 開発環境 | 特記事項 |
|---|---|---|
| TextGridCtrl40 | Visual C++ 4.0 | MBCS, 32bit |
| TextGridCtrl90 | Visual Studio 2008 Standard | MBCS, 32bit |
| TextGridCtrl140 | Visual Studio 2015 Community | UNICODE, 64bit対応 |
| TextGridCtrl143 | Visual Studio 2022 Community | UNICODE, 64bit対応 |