TextGridCtrlライブラリ
公式ガイドブック
(C)2000-2025 kuzu

はじめに

TextGridCtrlライブラリは、MFC(Microsoft Foudation Class)拡張ライブラリであり、CWndから派生した、プレーンテキストのグリッドコントロールのクラスである。このライブラリは、Excelのようにグリッド上にテキストを入力できる他、グリッド数の設定や、選択部の切り取り・コピー・貼り付け機能を有する。

TextGridCtrlライブラリはC++言語で書かれており、ソースコードのほか、ダイナミックリンクライブラリ(*.dll)の形で提供される。ライセンスはオープンソースで、LGPL又はMPLのデュアルライセンスである。


▲デフォルトの見え方


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


▲切り取り・コピー・貼り付けは、Excelなどの表計算ソフトと互換している。

第1章:概略

1-1.TextGridCtrlについて

CTextGridCtrlは、MFCの拡張クラスであり、CWndより派生する。

CObject
└CWnd
 └CTextGridCtrl

1-2.構築方法

主にダイアログボックス内にコンボボックス同様に配置して使う。ただし、リソーススクリプト上では配置できないので、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;
}

1-3.行数・列数・行幅・列幅・タイトル行文字列・タイトル列文字列・セル文字列の取得・設定方法

関数リファレンスを参照してください。

1-4.破棄方法

上記の場合、m_theTextGridCtrlは親ウィンドウの破棄と同時に自動で行われるので、何もしなくてよい。

1-5.プロジェクト設定事項

ソースコードで、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も別途配布しておりますので参考にしてください。

第2章:CTextGridCtrlリファレンス

2-1.概要

2-2.アトリビュート

ドキュメントデータ(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; 右クリック用のコンテキストメニュー

2-3.オペレーション

関数定義 引数 戻り値 解説
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対応