Grid Control 4

  

サブメニュー


ここに紹介するプログラムは、WIN XP 2003/Windows 7 (32bits) - OS 環境でマイクロソフトのVisual Studio 2010 で作ったものです。

Windows XP/ Windows 7(32bits) での動作は確認済みですが…


Grid Control の着目セルのハイライト

データを入力したり編集するために、指定したGridのセルをハイライトしたり移動したりする機能が必要である。

マウスで特定のセルをクリックした時や矢印キーの左右・上下を指定した場合、そのセルにハイライトが移動したりする機能は、GridControlの標準機能でも付属していますが、使い勝手が好みに合わないため独自に作ることにしました。

独自の機能は以下のように決めました。

ざっと以上の機能が必要となります。

Gridの初期設定専用クラスの作成

まず初めに、Gridの形状や左端に行番号を表示するコードを書きました。

この機能は汎用的に今後使用出来そうなので単独のクラスとしてコーディングしました。 クラス名はCGridContolとしました。

メンバー関数は、

 

CPoint SetCurrentCel( );

CPoint GetPosition( );

CPoint SetSelectedCel(.......);     所定のセルのハイライト

CPoint KillSelectedCel(........);     所定のセルのハイライトを消す

void SetTextMatrixRight(.......);    右アライメントを持った特定のセルへの文字列の表示
void SetTextMatrixLeft(......);      左アライメントを持った特定のセルへの文字列の表示
void SetTextMatrixCenter(.....);  中央アライメントを持った特定のセルへの文字列の表示
void LossGridHighLight(.....);       指定行番号セルのハイライトを消す
long SetGridHighLight(.....);        指定行番号セルのハイライト

CPoint GetPosition(........);         所定のセルの位置を取得
void SetGridStyle(.....);              Gridの最大行・最大列の指定
void SetFixedColor(.....);            固定行・列数とその色の設定
void SetTitle_N(.....);                  左端の行番号表示

 

標準のGridメンバー関数を利用していますのでPCによっては表示速度が遅く不満に感じられるかもしれません。

不満の方は独自にActiveXなどを使い作成してください。

コードのソースは、Zipファイルとして添えつけてありますので、次をクリックしてダウンロードして下さい。

特定のデータ入力セルをハイライトする

リソースエディタで表中のFlexGridのハイライト機能をOffにし、スクロールバーは垂直のみをOnとします。

貼り付けたGridの大きさを調整し 、初期最大行数より1行少ない大きさに調整します。

 

リソースエディタで表示行数と列数を仮に設定し、表示しながら大きさを調整することにしました。コードで設定する方法が最適ですがここでは省略します。 これで、常にスクロールバーが表示され、醜い隙間が表示されなくなります。

 

次にClassWizardでダイアログクラスに新たな関数を宣言します。

 

///////////////////////////////////////////////
// 選択したセル表示
void CWallDlg::SetSelectedCel( long col, long row )
{
    if( col>0 && row < m_maxrow) {
       m_grid.SetCol( col );   // 着目セルの列取得
       m_grid.SetRow( row );  // 着目セルの行取得
       m_grid.SetCellBackColor( RGB( 0, 255, 255 ));
       m_col = col;  // 着目しているセルの列をメンバー変数にコピー
       m_row = row; // 着目しているセルの行をメンバー変数にコピー
    }
}

///////////////////////////////////////////////
// 選択解除したセル
void CWallDlg::KillSelectedCel(long col, long row)
{
    if( col> 0 && row < m_maxrow ) {
       m_grid.SetCol( col );
       m_grid.SetRow( row );
       m_grid.SetCellBackColor( 0 );
    }
}

 

この関数は、行番号をUpdateする関数です。 変数 m_pt は、ダイアログクラスのメンバー変数で着目行を保持する関数です。


///////////////////////////////
// No.の設定
int CWallDlg::SetPt(int OldPt, int NewPt)
{
    CGridControl gc;
    CString szData;

  

    int n = m_ArrayWall.GetSize();

 

    if( n<NewPt ){ // アレーが増えている場合のみ

        szData.Format( "%02d", NewPt );

        gc.SetTextMatrixCenter( &m_grid, NewPt, 0, szData );

    }

    return NewPt;
}

 

 

前ページに戻る

次のページへ


ページ先頭に戻る
最終更新日: 2020/02/04