# TextGridCtrlライブラリ
公式ガイドブック
(C)2000-2026 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; | 各セルの文字列配列
CUIntArray m_theReadOnlyArray; | 各セルがリードオンリーか。
CUIntArray m_theTextColorArray; | 各セルの文字色

非ドキュメントデータ(protected)

変数定義 | 解説
--- | ---
int m_nCurRow; | 現在の行
int m_nCurCol; | 現在の列
int m_nVisibleTopRow; | 画面に表示されている最も上の行
int m_nVisibleLeftCol; | 画面に表示されている最も左の列
int m_nSelectedTopRow; | 選択されている最も上の行
int m_nSelectedBottomRow; | 選択されている最も下の行
int m_nSelectedLeftCol; | 選択されている最も左の行

一時的な状況保存用データ(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; |
int m_nLastNotifyRow; | 最後に親ウィンドウに通知したときの行(2025/09廃止)→後述のTextGridNotify構造体に移行
int m_nLastNotifyCol: | 最後に親ウィンドウに通知したときの列(2025/09廃止)→後述のTextGridNotify構造体に移行
int m_nLastNotifyTopRow: | 最後に親ウィンドウに通知したとき選択範囲の上行(2025/09廃止)→後述のTextGridNotify構造体に移行
int m_nLastNotifyLeftCol: | 最後に親ウィンドウに通知したとき選択範囲の左列(2025/09廃止)→後述のTextGridNotify構造体に移行
int m_nLastNotifyBottomRow: | 最後に親ウィンドウに通知したとき選択範囲の下行(2025/09廃止)→後述のTextGridNotify構造体に移行
int m_nLastNotifyRightRow: | 最後に親ウィンドウに通知したとき選択範囲の右列(2025/09廃止)→後述のTextGridNotify構造体に移行

描画オブジェクトなど(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 SetRowTitleWithNotify (int nRow, CString strRowTitle); | nRow:行番号(0オリジン), strRowTitle:タイトル文字列 | 正常終了:TRUE, 異常終了:FALSE | SetRowTitleを行い、親ウィンドウに通知する。
BOOL SetColTitle (int nCol, CString strColTitle); | nCol:列番号(0オリジン), strColTitle:タイトル文字列 | 正常終了:TRUE, 異常終了:FALSE | 指定列のタイトル文字列を設定する。設定された新しい文字列に従いアトリビュートを更新する。また、画面を更新する。
BOOL SetColTitleWithNotify (int nCol, CString strColTitle); | nCol:列番号(0オリジン), strColTitle:タイトル文字列 | 正常終了:TRUE, 異常終了:FALSE | SetCellTitleを行い、親ウィンドウに通知する。
BOOL SetCellString (int nRow, int nCol, CString strGridString); | nRow:行番号(0オリジン)、 nCol:列番号(0オリジン) strGridString:セル文字列 | 正常終了:TRUE, 異常終了:FALSE | 指定行・指定列のセル文字列を設定する。設定された新しい文字列に従いアトリビュートを更新する。また、画面を更新する。
BOOL SetCellStringWithNotify (int nRow, int nCol, CString strGridString); | nRow:行番号(0オリジン)、 nCol:列番号(0オリジン) strGridString:セル文字列 | 正常終了:TRUE, 異常終了:FALSE | SetCellStringを行い、親ウィンドウに通知をする。
double GetCellDouble (int nRow, int nCol, double dValue) const ; | nRow:行番号(0オリジン)、 nCol:列番号(0オリジン) | 正常終了:TRUE, 異常終了:FALSE | 指定行・指定列のセル値をdouble型で取得する。
BOOL SetCellDouble (int nRow, int nCol, double dValue, LPCTSTR lpszFormat); | nRow:行番号(0オリジン)、 nCol:列番号(0オリジン) dValue:セル値 lpszFormat：フォーマット文字列へのポインタ | 正常終了:TRUE, 異常終了:FALSE | 指定行・指定列のセルの文字列をdouble型で設定する。設定された新しい文字列に従いアトリビュートを更新する。また、画面を更新する。lpszFormatには、C言語のdouble型の表示フォーマットを指定する。NULLを指定した場合、デフォルトの文字列、現在のところ_T("%1.15g")を採用する。
BOOL SetCellDoubleWithNotify (int nRow, int nCol, double dValue, LPCTSTR lpszFormat); | nRow:行番号(0オリジン)、 nCol:列番号(0オリジン) dValue:セル値 lpszFormat：フォーマット文字列へのポインタ | 正常終了:TRUE, 異常終了:FALSE | SetCellDoubleを行い、親ウィンドウに通知する。
void DeleteAllRowTitle (); | なし | なし | すべての行のタイトル文字列を削除する。
void DeleteAllRowTitleWithNotify (); | なし | なし | DeleteAllRowTitleを行い、親ウィンドウに通知する。通知の行番号と列番号は-1とする。
void DeleteAllColumnTitle (); | なし | なし | すべての列のタイトル文字列を削除する。
void DeleteAllColumnTitleWithNotify (); | なし | なし | DeleteAllColumnTitleを行い、親ウィンドウに通知する。通知の行番号と列番号は-1とする。
void DeleteAllCellString (); | なし | なし | すべてのセルの文字列を削除する。
void DeleteAllCellString (); | なし | なし | DeleteAllCellStringを行い、親ウィンドウに通知する。通知の行番号と列番号は-1とする。

##### 行列の挿入と削除(サポートしません)

関数定義 | 引数 | 戻り値 | 解説
--- | --- | --- | ---
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 | 現在のカレントセルを設定する。新しい設定位置に従いアトリビュートを更新する。また、画面を更新する。カレントセルがはみ出した位置にある場合は自動的にスクロールする。

##### 親ウィンドウへの通知時の状態取得(2025/09廃止)→後述のTextGridNotify構造体に移行

関数定義 | 引数 | 戻り値 | 解説
--- | --- | --- | ---
BOOL GetLastNotifyInfo (int* pRow, int* pCol, int* pLeft, int* pTop, int* pRight, int* pBottom) const | pRow:行番号格納領域(0オリジン) pCol:列番号格納領域(0オリジン) pLeft:左番号格納領域(0オリジン) pTop:上番号格納領域(0オリジン) pRight:右番号格納領域(0オリジン) pBottom:列番号格納領域(0オリジン) | 正常終了:TRUE, 異常終了:FALSE | 親ウィンドウに通知されたときの、最後に変更された行、列、左、上、右、下(すべて0オリジンを取得する。SetCellStringWithNotifyでは行と列を格納する。その他の場合は、選択範囲を左、上、右、下に格納する。

##### オートスクロール処理(内部隠蔽)

関数定義 | 引数 | 戻り値 | 解説
--- | --- | --- | ---
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 IsCellReadOnly (int nRow, int nCol) const; | nRow:行 nCol:列 | はい:TRUE, いいえ:FALSE | 指定セルは読み込み専用(ユーザー入力不可か)を返す。
BOOL SetReadOnly (BOOL bReadOnly = TRUE); | bReadOnly:読み込み専用にするときはTRUE, しないときはFALSE | 正常終了:TRUE, 異常終了:FALSE | このコントロールは読み込み専用(ユーザー入力不可か)を設定する。読み込み専用の場合セル部背景はグレーになる。
BOOL SetCellReadOnly (int nRow, int nCol, BOOL bReadOnly = TRUE); | nRow:行 nCol:列 bReadOnly:読み込み専用にするときはTRUE, しないときはFALSE | 正常終了:TRUE, 異常終了:FALSE | 指定セルは読み込み専用(ユーザー入力不可か)を設定する。読み込み専用の場合セル部背景はグレーになる。
COLORREF GetCellTextColor (int nRow, int nCol) const; | nRow:行 nCol:列 | テキスト色 | 指定セルのテキストの色を取得する。
BOOL SetCellTextColor (int nRow, int nCol, COLORREF nColor) const; | nRow:行 nCol:列 nColor:テキスト色 | 正常終了: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 | 列幅は固定か(ユーザー調整不可か)を設定する。

##### 編集処理(元に戻す(U)・やり直し(R)・切り取り(T)・コピー(C)・貼り付け(P)・削除(D))

関数定義 | 引数 | 戻り値 | 解説
--- | --- | --- | ---
BOOL CTextGridCtrl::Undo (); | なし | 正常終了:TRUE, 異常終了:FALSE | 元に戻す。
BOOL CTextGridCtrl::UndoWithNotify (); | なし | 正常終了:TRUE, 異常終了:FALSE | 元に戻し、親ウィンドウに通知する。
BOOL CTextGridCtrl::Redo (); | なし | 正常終了:TRUE, 異常終了:FALSE | やり直し。
BOOL CTextGridCtrl::RedoWithNotify (); | なし | 正常終了:TRUE, 異常終了:FALSE | やり直しし、親ウィンドウに通知する。
BOOL CTextGridCtrl::Cut (); | なし | 正常終了:TRUE, 異常終了:FALSE | 選択範囲をクリップボードに切り取りする。
BOOL CTextGridCtrl::CutWithNotify (); | なし | 正常終了:TRUE, 異常終了:FALSE | 選択範囲をクリップボードに切り取りし、親ウィンドウに通知する。
BOOL CTextGridCtrl::Copy (); | なし | 正常終了:TRUE, 異常終了:FALSE | 選択範囲をクリップボードにコピーする。
BOOL CTextGridCtrl::CopyWithNotify (); | なし | 正常終了:TRUE, 異常終了:FALSE | 選択範囲をクリップボードにコピーし、親ウィンドウに通知する。
BOOL CTextGridCtrl::Paste (); | なし | 正常終了:TRUE, 異常終了:FALSE | 選択範囲にクリップボードから貼り付けする。
BOOL CTextGridCtrl::PasteWithNotify (); | なし | 正常終了:TRUE, 異常終了:FALSE | 選択範囲にクリップボードから貼り付けし、親ウィンドウに通知する。
BOOL CTextGridCtrl::Delete (); | なし | 正常終了:TRUE, 異常終了:FALSE | 選択範囲を削除する。
BOOL CTextGridCtrl::DeleteWithNotify (); | なし | 正常終了:TRUE, 異常終了:FALSE | 選択範囲を削除し、親ウィンドウに通知する。

### 2-4.通知メッセージ

このコントロールは、ダイアログの子コントロールである場合、所定のイベントが発生すると次のメッセージを親ウィンドウに送る。

メッセージは常にpParent->SendMessage (WM_NOTIFY, (WPARAM)GetDlgCtrlID (), (LPARAM)(&theTextGridNotify));で送られる。親ウィンドウの受信側で、theTextGridNotifyを解析することにより送られてきた送られてきたメッセージの種類(下記参照)、ウィンドウのハンドル、送られてきたコントロールのID、さらに特定のセルに関わるものは、メッセージが送られたときのセル行、セル列、範囲上、範囲下、範囲左、範囲右を取得することができる。

#### TextGridNotify構造体

メッセージID | 値(仮) | 解説
--- | --- | ---
NMHDR hdr; | HWND hwndFrom; | 送られてきたメウィンドウのハンドル
UINT_PTR idFrom; | 送られてきたコントロールのID
UINT code; | 送られてきたメッセージの種類(下記参照)
int m_nRow; | セル行(単一セルの変更)
int m_nCol; | セル列(単一セルの変更)
int m_nTop; | 範囲上(選択関係・コピー・切り取り・貼り付け・削除関係)
int m_nBottom; | 範囲下(選択関係・コピー・切り取り・貼り付け・削除関係)
int m_nLeft; | 範囲左(選択関係・コピー・切り取り・貼り付け・削除関係)
int m_nRight; | 範囲右(選択関係・コピー・切り取り・貼り付け・削除関係)

#### 通知メッセージとその値とその意味

メッセージID | 値(仮) | 解説
--- | --- | ---
TGN_SETFOCUS | 0x9E01 | フォーカスを得た時(実装済み)
TGN_KILLFOCUSS | 0x9E02 | フォーカスを失った時(実装済み)
TGN_ROWTITLECHANGES | 0x9E03 | 行タイトルが変更された時(実装済み)
TGN_COLTITLECHANGES | 0x9E04 | 列タイトルが変更された時(実装済み)
TGN_CELLSTRINGCHANGE | 0x9E05 | セルの文字列が変更されたとき(実装済み)
TGN_CURCELLCHANGE | 0x9E06 | 現在のセルが変更されたとき(未実装)
TGN_SELECTCHANGE | 0x9E07 | 選択範囲が変更されたとき(実装済み)
TGN_ROWHEIGHTCHANGE | 0x9E08 | 行高さが変更されたとき(SetRowHeightで実装済み・非推奨)
TGN_COLWIDTHCHANGE | 0x9E09 | 列幅が変更されたとき(SetColWidthで実装済み・非推奨)
TGN_UNDO | 0x9E0A | 元に戻すが実行されたとき(実装済み)
TGN_CUT | 0x9E0B | 切り取りが実行されたとき(実装済み)
TGN_COPY | 0x9E0C | コピーが実行されたとき(実装済み)
TGN_PASTE | 0x9E0D | 貼り付けが実行されたとき(実装済み)
TGN_DELETE | 0x9E0E | 削除が実行されたとき(実装済み)
TGN_HSCROLL | 0x9E0F | 水平スクロールが実行されたとき(未実装)
TGN_VSCROLL | 0x9E10 | 垂直スクロールが実行されたとき(未実装)
TGN_REDO | 0x9E11 | やり直しが実行されたとき(実装済み)

## ヴァージョン情報

ヴァージョン | 開発環境 | 特記事項
--- | --- | ---
TextGridCtrl40 (2009/09/20) | Visual C++ 4.0 | MBCS, 32bit。
TextGridCtrl90 (2016/07/31) | Visual Studio 2008 Standard | MBCS, 32bit。Visual Stuido 2008へ移植
TextGridCtrl140 (2022/09/24) | Visual Studio 2015 Community | UNICODE, 64bit対応。Visual Studio 2015へ移植
TextGridCtrl143 (2025/06/09) | Visual Studio 2022 Community | Visual Studio 2022へ移植
TextGridCtrl143 (2025/11/22) | Visual Studio 2022 Community | 右クリックメニューに、「元に戻す」・「やり直し」のヒストリー機能を追加。 Ctrl+Z, Ctrl+X, Ctrl+C, Ctrl+Vなどのキーボード操作での「元に戻す」「切り取り」「コピー」「貼り付け」などに対応。 SetCellString, Copy, Cut, Paste, Delete, Undo, Redoの関数を、SetCellString(通知なし)とSetCellStringWithNotify(通知あり)に分別。 親ウィンドウへの通知方法をWM_NOTIFY+TextGridNotify構造体に変更。また、SendMessage方式に変更。従来の最後の状態値とPostMessage方式は廃止。
TextGridCtrl143 (2026/02/19) | Visual Studio 2022 Community | SetColumnTitle, SetRowTitle, SetCellDouble, DeleteAllRowTitle, DeleteAllColTilte, DeleteAllCellStirngの(通知なし)と(通知あり)に分別するのを忘れていたので分別。これまでの関数は通知なしになるので、通知ありが必要な場合はWithNotify付きの方を使うこと。