코드구루에서 구한 커스텀 컨트롤을 이용하는 방법을 알아보겠습니다.
1. 우선 다이얼로그 베이스의 프로젝트를 생성합니다.
이름은 GridTest로 하겠습니다.
2. 위 파일을 다운로드한 후 압축을 풀고, 모든 파일을 프로젝트에 포함시킵니다.
3. 다이얼로그에 Custom Control을 하나 배치합니다.
Controls 도구상자의 가장 왼쪽 아래에 있는 사람 모양 아이콘입니다.
4. 컨트롤의 속성 페이지로 들어가서 아래와 같이 Class:에 MFCGridCtrl이라고 입력합니다.
5. GridTestDlg.h 파일에 아래 헤더를 인클루드하고,
#include "GridCtrl.h"
GridTestDlg 클래스에 CGridCtrl 클래스의 멤버 변수를 추가합니다.
CGridCtrl m_Grid;
6. 아래처럼 DDX_GridControl 함수를 사용하여 커스텀 컨트롤을 m_Grid멤버변수와 연결합니다.
void CGridTestDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CGridTestDlg)
// NOTE: the ClassWizard will add DDX and DDV calls here
//}}AFX_DATA_MAP
DDX_GridControl(pDX, IDC_GRID, m_Grid); //IDC_CUSTOM1은 커스텀 컨트롤의 NAME
}
7. CGridTestDlg 클래스의 OnInitDialog 함수에서 그리드 컨트롤을 초기화합니다.
초기화 값은 원하시는대로 변경하시면 됩니다.
BOOL CGridTestDlg::OnInitDialog()
{
CDialog::OnInitDialog();
... ...
1. 우선 다이얼로그 베이스의 프로젝트를 생성합니다.
이름은 GridTest로 하겠습니다.
2. 위 파일을 다운로드한 후 압축을 풀고, 모든 파일을 프로젝트에 포함시킵니다.
3. 다이얼로그에 Custom Control을 하나 배치합니다.
Controls 도구상자의 가장 왼쪽 아래에 있는 사람 모양 아이콘입니다.
4. 컨트롤의 속성 페이지로 들어가서 아래와 같이 Class:에 MFCGridCtrl이라고 입력합니다.
5. GridTestDlg.h 파일에 아래 헤더를 인클루드하고,
#include "GridCtrl.h"
GridTestDlg 클래스에 CGridCtrl 클래스의 멤버 변수를 추가합니다.
CGridCtrl m_Grid;
6. 아래처럼 DDX_GridControl 함수를 사용하여 커스텀 컨트롤을 m_Grid멤버변수와 연결합니다.
void CGridTestDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CGridTestDlg)
// NOTE: the ClassWizard will add DDX and DDV calls here
//}}AFX_DATA_MAP
DDX_GridControl(pDX, IDC_GRID, m_Grid); //IDC_CUSTOM1은 커스텀 컨트롤의 NAME
}
7. CGridTestDlg 클래스의 OnInitDialog 함수에서 그리드 컨트롤을 초기화합니다.
초기화 값은 원하시는대로 변경하시면 됩니다.
BOOL CGridTestDlg::OnInitDialog()
{
CDialog::OnInitDialog();
... ...
// TODO: Add extra initialization here
m_Grid.SetEditable(TRUE);
m_Grid.SetListMode(TRUE);
m_Grid.EnableDragAndDrop(TRUE);
m_Grid.SetTextBkColor(RGB(0xFF, 0xFF, 0xE0));
m_Grid.SetRowCount(5); //5행
m_Grid.SetColumnCount(4); //4열
m_Grid.SetFixedRowCount(1); //1고정 행
m_Grid.SetFixedColumnCount(1); //1고정 열
DWORD dwTextStyle = DT_RIGHT|DT_VCENTER|DT_SINGLELINE; //Text 스타일 정의
for (int row = 0; row < m_Grid.GetRowCount(); row++) {
for (int col = 0; col < m_Grid.GetColumnCount(); col++) {
GV_ITEM Item;
Item.mask = GVIF_TEXT|GVIF_FORMAT;
Item.row = row;
Item.col = col;
//셀의 텍스트 설정
if (row < 1) {
Item.nFormat = DT_LEFT|DT_WORDBREAK;
Item.szText.Format(_T("Column %d"),col);
} else if (col < 1) {
Item.nFormat = dwTextStyle;
Item.szText.Format(_T("Row %d"),row);
} else {
Item.nFormat = dwTextStyle;
Item.szText.Format(_T("%d"),row*col);
}
m_Grid.SetItem(&Item);
//셀의 색상을 랜덤으로
if (rand() % 10 == 1) {
COLORREF clr = RGB(rand() % 128+128,
rand() % 128+128,
rand() % 128+128);
m_Grid.SetItemBkColour(row, col, clr);
m_Grid.SetItemFgColour(row, col, RGB(255,0,0));
}
}
}
//1행 1열은 read-only로 설정
m_Grid.SetItemState(1,1, m_Grid.GetItemState(1,1) | GVIS_READONLY);
//셀 너비는 자동으로 설정
m_Grid.AutoSize();
m_Grid.SetRowHeight(0, 3*m_Grid.GetRowHeight(0)/2);
return TRUE; // return TRUE unless you set the focus to a control
}
8. 빌드후 실행시켜 보면 아래와 같이 실행됩니다.
다른 함수들이나 자세한 사항은 소스코드 참조하시기 바랍니다.
GridCtrl.h 파일을 보시면 모든 함수들의 원형을 보실 수 있습니다.
자세한 설명은 없지만 함수명이 비교적 직관적으로 되어 있어 사용하기 쉽습니다.
m_Grid.SetEditable(TRUE);
m_Grid.SetListMode(TRUE);
m_Grid.EnableDragAndDrop(TRUE);
m_Grid.SetTextBkColor(RGB(0xFF, 0xFF, 0xE0));
m_Grid.SetRowCount(5); //5행
m_Grid.SetColumnCount(4); //4열
m_Grid.SetFixedRowCount(1); //1고정 행
m_Grid.SetFixedColumnCount(1); //1고정 열
DWORD dwTextStyle = DT_RIGHT|DT_VCENTER|DT_SINGLELINE; //Text 스타일 정의
for (int row = 0; row < m_Grid.GetRowCount(); row++) {
for (int col = 0; col < m_Grid.GetColumnCount(); col++) {
GV_ITEM Item;
Item.mask = GVIF_TEXT|GVIF_FORMAT;
Item.row = row;
Item.col = col;
//셀의 텍스트 설정
if (row < 1) {
Item.nFormat = DT_LEFT|DT_WORDBREAK;
Item.szText.Format(_T("Column %d"),col);
} else if (col < 1) {
Item.nFormat = dwTextStyle;
Item.szText.Format(_T("Row %d"),row);
} else {
Item.nFormat = dwTextStyle;
Item.szText.Format(_T("%d"),row*col);
}
m_Grid.SetItem(&Item);
//셀의 색상을 랜덤으로
if (rand() % 10 == 1) {
COLORREF clr = RGB(rand() % 128+128,
rand() % 128+128,
rand() % 128+128);
m_Grid.SetItemBkColour(row, col, clr);
m_Grid.SetItemFgColour(row, col, RGB(255,0,0));
}
}
}
//1행 1열은 read-only로 설정
m_Grid.SetItemState(1,1, m_Grid.GetItemState(1,1) | GVIS_READONLY);
//셀 너비는 자동으로 설정
m_Grid.AutoSize();
m_Grid.SetRowHeight(0, 3*m_Grid.GetRowHeight(0)/2);
return TRUE; // return TRUE unless you set the focus to a control
}
8. 빌드후 실행시켜 보면 아래와 같이 실행됩니다.
다른 함수들이나 자세한 사항은 소스코드 참조하시기 바랍니다.
GridCtrl.h 파일을 보시면 모든 함수들의 원형을 보실 수 있습니다.
자세한 설명은 없지만 함수명이 비교적 직관적으로 되어 있어 사용하기 쉽습니다.