1. Code Project에서 파일 복사(http://www.codeproject.com/Articles/8/MFC-Grid-control-2-27)

(본 포스트에는 하단에 파일을 직접 업로드 했습니다. 추후 저작권 관련 문제 발생시 삭제합니다.)


2. 이 상태에서 컴파일을 하면 오류가 발생하므로 MemDC.h 파일 내의 CMemDC 클래스의 이름을 다른 이름으로 변경


3. 커스텀 컨트롤 추가(ID를 IDC_GRID라고 해 본다)


4. 속성 -> Class 에 "MFCGridCtrl"이라고 넣음


5. 헤더파일에 #include "GridCtrl.h" 추가


6. 변버변수 추가 CGridCtrl m_Grid;


7. DoDataExchange에서 아래 내용 추가

   DDX_GridControl(pDX, IDC_GRID, m_Grid); // 추가


8. 초기화 한 다음 사용


9. 아래는 대충 샘플 코드


void CTab1Dlg::DrawGrid(CGridCtrl &tmp_grid)

{

tmp_grid.SetEditable(FALSE);

tmp_grid.SetListMode(TRUE);

tmp_grid.EnableDragAndDrop(FALSE);

tmp_grid.SetTextBkColor(RGB(0xFF, 0xFF, 0xE0));


tmp_grid.SetRowCount(13);            //5행

tmp_grid.SetColumnCount(2);        //4열

tmp_grid.SetFixedRowCount(1);        //1고정 행

//tmp_grid.SetFixedColumnCount(1);    //1고정 열


//int aa = tmp_grid.GetColumnWidth(0);

//int bb = tmp_grid.GetColumnWidth(1);

tmp_grid.SetColumnWidth(0,120);

tmp_grid.SetColumnWidth(1,70);


DWORD dwTextStyle = DT_CENTER|DT_VCENTER|DT_SINGLELINE;    //Text 스타일 정의

for (int row = 0; row < tmp_grid.GetRowCount(); row++) 

{

for (int col = 0; col < tmp_grid.GetColumnCount(); col++) 

GV_ITEM Item;

Item.mask = GVIF_TEXT|GVIF_FORMAT;

Item.row = row;

Item.col = col;


//셀의 텍스트 설정

if (row == 0 && col==0) 

{

Item.nFormat = DT_CENTER|DT_WORDBREAK;

Item.strText.Format(_T("시스템 명칭"),col);


else if (row == 0 && col==1) 

{

Item.nFormat = DT_CENTER|DT_WORDBREAK;

Item.strText.Format(_T("현재 값"),col);


else if (col < 1) 

{

Item.nFormat = dwTextStyle;

Item.strText.Format(_T("시스템 %d"),row);


else 

{

Item.nFormat = dwTextStyle;

Item.strText.Format(_T("%d"),row*col);

}

tmp_grid.SetItem(&Item);  


//셀의 색상을 랜덤으로

/*

if (rand() % 10 == 1) {

COLORREF clr = RGB(rand() % 128+128, 

rand() % 128+128, 

rand() % 128+128);

tmp_grid.SetItemBkColour(row, col, clr);

tmp_grid.SetItemFgColour(row, col, RGB(255,0,0));

}

*/

}

}

//1행 1열은 read-only로 설정

//tmp_grid.SetItemState(1,1, tmp_grid.GetItemState(1,1) | GVIS_READONLY);


//셀 너비는 자동으로 설정

//tmp_grid.AutoSize();

tmp_grid.SetRowHeight(0, 3*tmp_grid.GetRowHeight(0)/2);

}

 

출처 : http://eachan.tistory.com/36 (기린 인간님의 티스토리 블로그)

 

 

gridctrl227_src.zip

 

gridctrl_demo227.zip




추가.

GridCtrlWithMergeCellAndFreezePane.zip


코드프로젝트에서 위 소스에 Cell merge와 freeze를 추가한 코드를 발견.