codejock과 더불어 많이 사용하고 있는 bcgsoft의
BCGControlBar Library를 가지고 간단한 Chart를
하나 그려 보면서 사용법을 알아 보도록 하겠습니다.
1. 프로젝트 생성
BCGControllerBar를 설치 했으면 적당한 이름으로 프로젝트를
생성해 줍니다.
계속 [다음] 버튼을 누르다
보면 설정들이 일반 MFC 프로젝트와 비슷하지만 종류가 많아진 것을 알 수 있는데
그냥 Single Document를 선택하고 모두 [다음] 버튼을 선택해서 넘어 갑니다.
그리고 프로젝트 생성 마지막 단계에서 Base class를 CBCGPFormView 를 선택해 주고 [Finish] 버튼을 선택
합니다.
2. BCG 추가하기
프로젝트가 생성이 되었으면 이제 본격적으로 차트를 그려보도록 하겠습니다.
- 리소스 뷰에서 main FORM
을 선택합니다.
- Form에 Picture
Control을 하나 적당하게 그려 넣어 줍니다.
- 속성 값에
Type :
Rectangle
Color : Gray
를 선택 합니다. ID는
편한대로 하고 저는 IDC_CHART로 했습니다.
프로젝트를 저장 하고 코딩을 하기 전에 프로젝트가 제대로 생성되었는지
일단 실행 해볼까요?
저는 코딩 하기 전에 한번 환경이 잘 잡혔는지 잘못 입력된 부분이
있는지 시행을 해봅니다.
이런… 오류가 뜨는 군요.
BCGControlbar를 x64로
설치하고 x86으로 실행을 해서 발생한 오류 입니다.
이유를
찾느라 시간을 좀 허비 했었는데 나같은 사람을 없겠죠.
설정 값만 x64로 변경하고 실행하면 이번엔 오류 없이 잘 나옵니다.
아직은 chart를 그리지 않아서 회색의 빈 공간으로 나타나지만
계획대로 잘 나왔습니다.
3. 코딩
BCGPieChartView.h 헤더 파일에 다음 항목을 정의 합니다.
public:
CBCGPChartCtrl m_PieChart;
int m_nHoleSize;
CString m_strHoleSize;
void UpdatePieChart();
BCGPieChartView.cpp 소스 파일에 그리기 코딩 작업을 합니다.
CBCGPieChartView() 함수에 헤더에서 정의한 변수의 기본값을 설정 합니다.
CBCGPieChartView::CBCGPieChartView()
: CBCGPFormView(CBCGPieChartView::IDD)
{
EnableVisualManagerStyle();
// TODO: add construction code here
m_nHoleSize = 50;
m_strHoleSize = _T("");
m_strHoleSize.Format(_T("%d%%"), m_nHoleSize);
}
form에 그렸던 picture
controll을 연결 합니다.
void CBCGPieChartView::DoDataExchange(CDataExchange* pDX)
{
CBCGPFormView::DoDataExchange(pDX);
DDX_Control(pDX, IDC_CHART, m_PieChart);
}
이제 차트를 그리기 위한 초기 설정 값들을 적어줍니다.
void CBCGPieChartView::OnInitialUpdate()
{
CBCGPFormView::OnInitialUpdate();
GetParentFrame()->RecalcLayout();
//Pie Draw
CBCGPInfoTipOptions infoTipOptions;
infoTipOptions.m_StemLocation = CBCGPPopupWindow::BCGPPopupWindowStemLocation_Left;
m_PieChart.EnableInfoTip(TRUE, &infoTipOptions);
CBCGPChartVisualObject* pChart = m_PieChart.GetChart();
ASSERT_VALID(pChart);
pChart->ShowDataLabels(TRUE);
pChart->SetChartType(BCGPChartPie); //차트 종류를 기입하는곳 입니다.
pChart->SetRect(CRect(0, 0, 200, 200), TRUE);
pChart->SetLegendPosition(BCGPChartLayout::LP_NONE, FALSE, FALSE);
pChart->SetChartTitle(_T("Test PieChart")); //차트상단 타이틀입니다.
pChart->AddChartData(_T("Apple"), 60); //이건 아시죠? 차트별 값
pChart->AddChartData(_T("Orange"), 20);
pChart->AddChartData(_T("Banana"), 20);
UpdatePieChart();
}
차트 초기값 설정이 끝났으니 차트를 그리는 부분을 코딩합니다.
차트 설정가 그리는 부분을 나눈 이유는 아시죠?
차트 값이 변경되면 다시 그리는 부분이라고 생각하시면 어떻게 응용해야 하는지 감을 잡았겠죠.
void CBCGPieChartView::UpdatePieChart()
{
UpdateData();
CBCGPChartVisualObject* pChart = m_PieChart.GetChart();
ASSERT_VALID(pChart);
BCGPChartDataLabelOptions dataLabelOptions = pChart->GetDataLabelOptions();
dataLabelOptions.m_position = BCGPChartDataLabelOptions::LabelPosition::LP_CENTER;
dataLabelOptions.m_bUnderlineDataLabel = TRUE;
dataLabelOptions.m_content = BCGPChartDataLabelOptions::LC_PIE_NAME_PERCENTAGE;
dataLabelOptions.m_bDrawDataLabelBorder = dataLabelOptions.m_position != BCGPChartDataLabelOptions::LP_DEFAULT_POS && dataLabelOptions.m_position != BCGPChartDataLabelOptions::LP_OUTSIDE_END;
pChart->SetDataLabelsOptions(dataLabelOptions);
pChart->Redraw();
}
여기서는 그냥 간단히 차트를 하나 그리는것만 하였습니다.
실제로 설정값들이 여러가지 있습니다. 그건 하나씩 변경하면서 어떻게
결과가 나오는지 확인해 보면서 익히셔야 합니다.
여기까지의 코딩 결과를 실행해 보면 아래처럼 파이차트가 나타납니다.
간단히 legend를 안보이게 하면 아래처럼…
끝입니다.
- copy coding -