기본 구성 및 아키텍처 개요
Codejock Xtreme Toolkit Pro 15.3.1은 Visual C++ 기반의 고성능 UI 개발을 위한 전문적인 컨트롤 라이브러리로, MFC(Microsoft Foundation Classes) 프레임워크 위에 구축되어 있습니다. 이 도구는 도구 모음, 메뉴, 그리드, 차트 등 다양한 고급 인터페이스 요소를 제공하며, 오피스 스타일의 완전한 테마 시스템과 깊이 있는 맞춤화 기능을 지원합니다. 전체 소스 코드, 예제 프로젝트, 문서, 그리고 핵심 라이브러리 파일이 포함되어 있어 개발 속도와 유지보수 용이성을 크게 향상시킵니다.
핵심 컴포넌트 설계
이 라이브러리는 모듈형 아키텍처를 채택하고 있으며, 주요 서브시스템으로는 CommandBars, Controls, Chart, DockingPane 등이 있습니다. 모든 컴포넌트는 테마 엔진, 고해상도 화면 대응, 유니코드 지원 등을 내장하고 있으며, Visual Studio 2008부터 최신 버전까지 호환됩니다. 이를 통해 복잡한 Win32 API 호출을 추상화하여 전문 수준의 사용자 인터페이스를 간편하게 구현할 수 있습니다.
MFC 프레임워크와의 통합 기법
현대 기업용 애플리케이션 개발에서 여전히 많은 시스템이 기존의 MFC 기반으로 운영되고 있습니다. Codejock Xtreme Toolkit Pro는 이러한 기존 프로젝트에 고도로 확장된 컨트롤을 추가할 수 있도록 설계되었습니다. 특히 랩퍼 클래스를 통해 원래의 MFC 컨트롤을 상속하고 시각적 재설계를 수행함으로써, 기존 애플리케이션의 외관과 경험을 현대식으로 개선할 수 있습니다.
프로젝트 초기화 절차
애플리케이션 시작 시 CWinApp 파생 클래스 내에서 CXTPCommandBars 관리자를 생성해야 합니다. 이 객체는 전체 UI 시스템의 중심 역할을 하며, 테마 설정, 명령 처리, 디바이스 픽셀 비율 조정 등을 담당합니다.
class CMyApplication : public CWinApp {
public:
CXTPCommandBars* m_pCmdBars;
virtual BOOL InitInstance();
};
BOOL CMyApplication::InitInstance() {
if (!CWinApp::InitInstance()) return FALSE;
m_pCmdBars = new CXTPCommandBars;
CXTPPaintManager::SetTheme(xtpThemeOffice2007);
CMainFrame* pFrame = new CMainFrame;
m_pMainWnd = pFrame;
if (!pFrame->LoadFrame(IDR_MAINFRAME)) return FALSE;
pFrame->ShowWindow(SW_SHOW);
pFrame->UpdateWindow();
return TRUE;
}
- 라인 6: 전역 커맨드 바 관리자 포인터 선언
- 라인 12: 애플리케이션 시작 지점, 모든 초기화 작업 수행
- 라인 17:
CXTPCommandBars인스턴스 생성 (중앙 제어) - 라인 20:
xtpThemeOffice2007와 같은 테마 적용 (다른 옵션:Office2010,NativeWin7)
메시지 매핑과 이벤트 처리
Toolkit은 표준 MFC 메시지 매핑 시스템과 완전히 호환되며, ON_BN_CLICKED 등의 매크로를 그대로 사용할 수 있습니다. 그러나 복잡한 상호작용(예: 랩퍼 드래그, 팝업 메뉴)을 위해 자체 메시지(WM_XTP_*)를 도입했습니다.
#define WM_XTP_CONTROL_CLICK (WM_USER + 1001)
LRESULT CMyDialog::OnControlClick(WPARAM wp, LPARAM lp) {
CXTPControl* pCtrl = (CXTPControl*)wp;
AfxMessageBox(pCtrl->GetCaption() + _T(" 클릭됨"));
return 0;
}
BEGIN_MESSAGE_MAP(CMyDialog, CDialogEx)
ON_MESSAGE(WM_XTP_CONTROL_CLICK, &CMyDialog::OnControlClick)
END_MESSAGE_MAP()
고급 컨트롤 활용 및 커스터마이징
기본적인 CXTPButton, CXTPEdit 등의 컨트롤은 원본의 인터페이스를 유지하면서도 평면/둥근 테두리, 아이콘 삽입, 그라데이션 배경 등 현대적인 스타일을 지원합니다.
버튼 컨트롤 예제
void CMyDialog::OnInitDialog() {
CDialogEx::OnInitDialog();
m_btnOk.SubclassDlgItem(IDC_BUTTON1, this);
m_btnOk.SetStyle(xtpButtonFlat);
m_btnOk.SetTextColor(RGB(0,120,215));
m_btnOk.SetIcon(IDI_OK, CSize(16,16));
}
SubclassDlgItem(): 기존 리소스 컨트롤을 커스텀 클래스로 재정의SetStyle(): 평면 스타일 적용 (마우스 오버 시 강조 효과)SetIcon(): ICO/PNG 형식의 아이콘 연동
동적 컨트롤 생성 및 메모리 관리
리소스 에디터만으로는 불가능한 동적 생성은 다음과 같이 가능합니다.
CXTPButton* pBtn = new CXTPButton();
if (pBtn->Create(_T("동적 버튼"), WS_CHILD | WS_VISIBLE,
CRect(10, 10, 120, 40), this, IDC_DYNAMIC_BTN)) {
pBtn->SetStyle(xtpButtonTheme);
}
이 경우 부모 윈도우 종료 시 메모리 해제를 반드시 수행해야 합니다.
테마 및 스타일링 기능
공통적으로 CXTPPaintManager를 통해 전역 테마를 설정할 수 있으며, 고해상도 환경에서도 자연스럽게 작동합니다.
CXTPPaintManager::SetTheme(xtpThemeOffice2019Dark);
또한, 개인화된 색상과 이미지 리소스를 직접 교체하는 것도 가능합니다.
주요 컴포넌트 정리표
| 컴포넌트 | 주요 기능 | 사용 예시 |
|---|---|---|
| CXTPRibbonBar | Ribbon 인터페이스 구현 | 탭, 그룹, 컨트롤 계층 구조 |
| CXTPDockingPaneManager | 고정/플로팅 패널 관리 | 출력, 속성 창 등 |
| CXTPGridCtrl | 데이터 그리드 표시 | DB 연결, 편집, 필터링 |
| CXTPChartControl | 차트 시각화 | 선 그래프, 막대, 파이 차트 |
| CXTPCalendarCtrl | 달력 컨트롤 | 일정 관리, 선택 기능 |
실제 사례: 데이터 그리드 바인딩
SQL Server 결과셋을 CXTPGridCtrl에 직접 바인딩하는 예제입니다.
void CMyDialog::BindGridFromDatabase() {
CDatabase db;
db.OpenEx(_T("DSN=..."));
CRecordset rs(&db);
rs.Open(...);
m_grid.GetRows()->RemoveAll();
// 헤더 설정
CXTPGridRow* pHeader = m_grid.GetHeaderRow();
pHeader->SetCaption(0, _T("ID"));
pHeader->SetCaption(1, _T("이름"));
while (!rs.IsEOF()) {
CString strName;
long nAge;
rs.GetFieldValue(_T("Name"), strName);
rs.GetFieldValue(_T("Age"), nAge);
CXTPGridRow* pRow = m_grid.InsertRow(new CXTPGridRow());
pRow->SetCaption(0, strName);
pRow->SetCaption(1, CString(nAge));
rs.MoveNext();
}
m_grid.RedrawControl();
}
결론
Codejock Xtreme Toolkit Pro 15.3.1은 고성능, 고도의 커스터마이징이 가능한 전문적인 MFC UI 개발 툴킷입니다. 단순한 가시적 개선을 넘어, 애플리케이션의 유지보수성, 확장성, 사용자 경험을 극대화하는 데 기여합니다. 완전한 소스 코드를 포함하고 있어, 내부 동작 원리를 분석하거나 맞춤형 기능을 추가하는 데 유리합니다.