2009년 07월 31일
Prof-UIS (UI library) 사용하기
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_600
1. 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 파일을 열고 다음을 추가 해 준다.
내 프로젝트 폴더에 있는 res/Test.rc2 파일을 메모장으로 열고 다음 내용을 추가 한다.(프로젝트명이 Test라고 가정)
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 테마를 적용하고 싶으면 주석을
해제해 주면 된다.
어느 정도 작업이 끝났으니 컴파일 한 후 실행을 시켜 보자.
< 불완전하게 테마가 적용된 모습 >
실행하고 보니 결과물이 먼가 이상하다. 윈도우 타이블 부분도 그렇고 버튼도 그렇고 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 테마가 적용 된 모습 >
그 외 컨트롤러 들은 다음 표를 보고 적당한 클래스를 연결 시켜 주면 된다.
4. 추가 정보
Prof-UIS의 국내 판매 대행을 이지플로우(http://www.easyflow.co.kr/)라는 곳에서 하고 있다. 이곳에 가면 몇가지 추가 정보를
얻을 수 있으며 궁금한 점을 질문하면 답변도 얻을 수 있다.
상황에서는 외부 라이브러리를 가져다가 사용하는게 한결 수월할 것이다.
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_600
1. 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
#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) 기능을 이용
하면 편리하다.

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)
);
//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으로 바꿔줘야 한다. 클래스위자드를
사용하여 각 버튼마다 컨트롤변수를 연결 해 준다.

Static Text 컨트롤 역시 CExtStatic 클래스와 연결 시켜 줘야 하는데 컨트롤의 이름이 IDC_STATIC으로 되어 있으면 클래스
위자드에 표시가 되지 않는다. Static Text 컨트롤 이름을 IDC_S1으로 바꿔준다.

클래스 위자드에서 IDC_S1에 대한 컨트롤 변수를 생성해 준 후에 CStatic 단어를 CExtLabel 로 바꿔주자.
지루한 편집 작업이 모두 끝났다. 실행을 시켜 보면 아래 그림과 같이 UI 테마가 적용된 모습을 확인 할 수 있다.

그 외 컨트롤러 들은 다음 표를 보고 적당한 클래스를 연결 시켜 주면 된다.
| 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/)라는 곳에서 하고 있다. 이곳에 가면 몇가지 추가 정보를
얻을 수 있으며 궁금한 점을 질문하면 답변도 얻을 수 있다.
# by | 2009/07/31 22:08 | CS - 프로그래밍 | 트랙백 | 핑백(1) | 덧글(0)





☞ 내 이글루에 이 글과 관련된 글 쓰기 (트랙백 보내기) [도움말]
... 다운로드 : 해당 프로젝트는 Prof-UIS 라는 라이브러리가 설치되어 있어야 컴파일이 가능합니다. 자세한 라이브러리 사용 방법은Prof-UIS 사용하기 를 참고하십시오.0. 서문 현대사회가 정보화, 전자화 됨에 따라 투표자가 직접 투표소에 가서 투표를 해야 하는 기존의 선거 방식을 간편하게 전자기기(컴퓨터 ... more