VS2008의 경우 최신 UI 라이브러리를 제공해 주기 때문에 그다지 필요성이 없지만 아직도 VC++ 6.0으로 개발을 해야 하는
상황에서는 외부 라이브러리를 가져다가 사용하는게 한결 수월할 것이다.
Prof-UIS(
www.prof-uis.com)는 상용 라이브러리지만 공개용으로도 일정 기능을 제공하기 있기 때문에 개인이 쓰기엔 괜찮은
라이브러리다.
0. VS 환경 설정하기< VC++ 6.0 기준 >
VC++ 6.0을 실행한 후
Tool -
Options -
Directories 를 다음과 같이 설정한다.
- Include files : ../Prof-UIS/Include
- Source files : ../Prof-UIS/Src
- Library files : ../Prof-UIS/Bin_6001. Prof-UIS 라이브러리 빌드하기Prof-UIS를 DLL형태로 사용 하려면
ProfUISDLL 폴더안에 있는 ProfUISDLL_600.dsw 로 빌드를 하면 되고,
static library로 사용하려면
ProfUISLIB 폴더안에 있는 ProfUISLIB_600.dsw 로 빌드를 해주면 된다.
다양한 빌드 환경을 제공해 주므로 자신의 프로젝트에 맞는 빌드 환경을 선택한 후 Build(F7) 한다.(중요)이렇게 빌드한 라이브러리는
../Prof-UIS/Bin_600 폴더안에 생성된다.
만약 DLL 형태로 생성하였다면 해당 DLL 파일을 자신의 프로젝트 폴더로 복사해 줘야 한다. 프로젝트를 컴파일 할 때는 상관
없지만 컴파일 하고 바로 실행(Ctrl+F5)을 하려면 DLL 파일이 같은 폴더에 있어야 하기 때문이다.
자세한 빌드 환경에 대한 설명은
../Prof-UIS/Help/ProfUIS285.chm 파일을 연 후
Articles -
Prof-UIS Build Configurations을 참고한다.
2. 내 프로젝트에 Prof-UIS 라이브러리 추가하기이제 라이브러리도 빌드하였으니 내 프로젝트에서 사용 가능하도록 라이브러리를 추가해 보자.
먼저
StdAfx.h 파일을 열고 다음을 추가 해 준다.
#include <Prof-UIS.h>
내 프로젝트 폴더에 있는
res/Test.rc2 파일을 메모장으로 열고 다음 내용을 추가 한다.(프로젝트명이 Test라고 가정)
#if ( !(defined _AFXDLL && !defined __STATPROFUIS_WITH_DLLMFC__) )
#include <Resources/Resource.rc>
#endif
3. Prof-UIS 라이브러리 사용하기라이브러리를 사용하기 위한 모든 환경 설정이 끝났으므로 간단한 예제를 통하여 UI를 적용해 보자.
Dialog based Application
Step 1에서 라이브러리를 빌드 할때 빌드 환경을 Win32 Static MBCS Debug로 설정한 후 Build 한다.
그런 다음 Dialog based application 프로젝트를 하나 생성한다. 프로젝트명은 Test로 한다고 가정한다.
Project Settings(Alt+F7) 창에서 General - Mircosoft Foundation Classes 를 Use MFC in a Static Library로 설정한다.
Step 2에서 처럼 StdAfx.h 파일과 Test.rc2 파일을 수정한다.
CTestDlg는 기본적으로 CDialog를 상속받게 되어 있는 데 CExtResizableDialog라는 클래스에서 상속받도록 수정을 해줘야
한다. TestDlg.h 와 TestDlg.cpp 파일에서
CDialog 단어를
CExtResizableDialog로 바꿔준다. Replace(Ctrl+H) 기능을 이용
하면 편리하다.
< Replace 기능을 사용하여 부모 클래스를 바꿔치기 해주자 > CTestApp::InitInstance() 함수에 아래 코드를 추가한다. 코드를 보면 알겠지만 이 후 다른 UI 테마를 적용하고 싶으면 주석을
해제해 주면 된다.
g_PaintManager.InstallPaintManager(
//RUNTIME_CLASS(CExtPaintManager)
//RUNTIME_CLASS(CExtPaintManagerXP)
//RUNTIME_CLASS(CExtPaintManagerOffice2003)
//RUNTIME_CLASS(CExtPaintManagerOffice2003NoThemes)
//RUNTIME_CLASS(CExtPaintManagerStudio2005)
//RUNTIME_CLASS(CExtPaintManagerNativeXP)
//RUNTIME_CLASS(CExtPaintManagerOffice2007_R1)
RUNTIME_CLASS(CExtPaintManagerOffice2007_R2_LunaBlue)
//RUNTIME_CLASS(CExtPaintManagerOffice2007_R2_Obsidian)
);
어느 정도 작업이 끝났으니 컴파일 한 후 실행을 시켜 보자.
실행하고 보니 결과물이 먼가 이상하다. 윈도우 타이블 부분도 그렇고 버튼도 그렇고 UI 테마가 전혀 적용이 되지 않았다.
좀 전에 CDialog를 CExtResizableDialog로 바꿔줬었는데 윈도우 타이틀까지 테마를 적용하려면 이를 다시 CExtNCW 템플릿으로
감싸줘야한다. 다시 Replace기능을 이용하여
CExtResizableDialog를
CExtNCW< CExtResizableDialog >로 바꿔준다.
TestDlg.h, TestDlg.cpp 모두 바꿔줘야 한다.
버튼의 경우 기본 코드에는 보이지 않지만 CButton 클래스를 사용하는데 이를 CExtButton으로 바꿔줘야 한다. 클래스위자드를
사용하여 각 버튼마다 컨트롤변수를 연결 해 준다.
다시 Replace 기능을 이용하여
CButton 단어를
CExtButton으로 바꿔준다.
Static Text 컨트롤 역시 CExtStatic 클래스와 연결 시켜 줘야 하는데 컨트롤의 이름이 IDC_STATIC으로 되어 있으면 클래스
위자드에 표시가 되지 않는다. Static Text 컨트롤 이름을 IDC_S1으로 바꿔준다.
< IDC_STATIC 이외의 이름으로 바꿔줘야만 클래스 위자드에 표시가 된다. > 클래스 위자드에서 IDC_S1에 대한 컨트롤 변수를 생성해 준 후에
CStatic 단어를
CExtLabel 로 바꿔주자.
지루한 편집 작업이 모두 끝났다. 실행을 시켜 보면 아래 그림과 같이 UI 테마가 적용된 모습을 확인 할 수 있다.
< Office2007_R2_LunaBlue 테마가 적용 된 모습 > 그 외 컨트롤러 들은 다음 표를 보고 적당한 클래스를 연결 시켜 주면 된다.
| Check Box controller | CExtCheckBox |
| Combo Box controller | CExtComboBox |
| Static Text controller | CExtLabel |
| Group Box controller | CExtGroupBox |
| List Box controller | CExtListCtrl |
| Radio Button controller | CExtRadioButton |
| Edit Box controller | CExtEdit |
4. 추가 정보Prof-UIS의 국내 판매 대행을 이지플로우(
http://www.easyflow.co.kr/)라는 곳에서 하고 있다. 이곳에 가면 몇가지 추가 정보를
얻을 수 있으며 궁금한 점을 질문하면 답변도 얻을 수 있다.