[Xtreme toolkit] .cjstyles 실행파일에 포함시키기

MFC에서 이쁘게 디자인을 하려면 손이 너무 많이간다.
하지만 codejock의 Xtreme toolkit을 사용하면 훨씬 수고를 덜 수 있다.

일반적으로 *.cjstyles 또는 *.msstyles 를 Load해서 사용할 수 있다.

void MyClass::SetSkin()
{
// 전체화면시 StatusBar가 잘리지 않게 추가
CXTPWinDwmWrapper().SetProcessDPIAware();
// Load된 다른 스레드에도 스킨을 입힐수 있는 기능이지만, 멀티 스레드 환경에서 스레드 이상종료 현상이 발생한다.
// 이 기능을 삭제하고 내 Main Frame에만 스킨기능을 사용하자.
XTPSkinManager()->SetAutoApplyNewThreads(FALSE);
XTPSkinManager()->LoadSkin(GetStylesPath() + _T("Office2007.cjstyles"));
XTPSkinManager()->SetApplyOptions(xtpSkinApplyFrame | xtpSkinApplyColors);

XTPPaintManager()->RefreshMetrics();
}

이렇게 하면 Office2007의 멋진 창이 나올것이다. 하지만 이렇게 하게되면 Office2007.cjstyles 파일을 함께 배포해야 한다.
따라서 다음과 같은 방법으로 실행파일에 포함시키자.

1. Toolkit 소스의 SkinFramework의 Style폴더내의 Office2007.rc 파일의 내 프로젝트의 rc2파일에 include 한다.
#include "SkinFramework\Styles\Office2007\Office2007.rc"

2. 리소스 파일을 로드하는 클래스 재정의
class CInstanceResourceFile : public CXTPSkinManagerResourceFile
{
public:
BOOL Open(LPCTSTR lpszResourcePath, LPCTSTR lpszIniFileName)
{
m_strResourcePath = lpszResourcePath;
m_strIniFileName = lpszIniFileName;


m_hModule = AfxGetInstanceHandle();

CString strFilePath(m_strIniFileName);

REPLACE_S(strFilePath, _T('.'), _T('_'));
REPLACE_S(strFilePath, _T('\\'), _T('_'));

HRSRC hRsrc = FindResource(m_hModule, strFilePath, _T("TEXTFILE"));
if (!hRsrc)
return FALSE;

HGLOBAL hResData = LoadResource(m_hModule, hRsrc);
if (!hResData)
return FALSE;

m_lpTextFile = (LPWSTR)LockResource(hResData);

m_lpTextFileEnd = m_lpTextFile + SizeofResource(m_hModule, hRsrc)/2;

if (m_lpTextFile && m_lpTextFile[0] == 0xFEFF)
m_lpTextFile++;

return TRUE;
}
void Close()
{
}
};

3. 적용
void MyClass::SetSkin()
{
CXTPWinDwmWrapper().SetProcessDPIAware();

XTPSkinManager()->SetAutoApplyNewThreads(FALSE);

XTPSkinManager()->SetResourceFile(new CInstanceResourceFile());
XTPSkinManager()->LoadSkin(_T(""), _T("NormalBlue.ini"));

XTPPaintManager()->RefreshMetrics();
}


ps. Xtreme Toolkit pro v12.0.1 기반에서 작성하였고, 새로운 버전은 좀더 쉽게 구현 가능한 듯 하다.

by 이카로스 | 2010/05/11 15:24 | C++/MFC | 트랙백 | 덧글(5)

트랙백 주소 : http://icarosss.egloos.com/tb/2601382
☞ 내 이글루에 이 글과 관련된 글 쓰기 (트랙백 보내기) [도움말]
Commented at 2010/08/18 12:39
비공개 덧글입니다.
Commented by 이카로스 at 2010/08/20 09:11
상용툴킷이라 샘플은 올려드리기는 어렵네요.
Commented by 윤하늘 at 2010/08/22 09:45
아..저도 상용으로 사긴했는데,쩝..알겠습니다.. 감사합니다..ㅠ
Commented by Xtreme질문 at 2011/06/17 17:47
Xtreme Toolkit Trial Version 다운받아서 이것저것 해보고 있는데요.
Skin 적용했는데요.
메시지 박스나 CXTPButton 들은 Skin이 적용이 되는데요..
Dialog는 적용이 안되더라구요 ㅠㅠ
Dialog에도 Skin을 적용시키려면 어떻게 해야 하나요??
Commented by 이카로스 at 2011/06/27 11:33
SetSkin을 다이얼로그 생성전에 실행해 주시면 됩니다.
예를 들면 MDI나 SDI방식에서 MainFrame에서 호출하는 것이 아니라 MainFrame을 생성하기 전에 실행시켜 주면 됩니다.
CMyApp 이함수겠죠.. 다이얼로그도 마찮가지입니다.

:         :

:

비공개 덧글

<< 이전 페이지     다음 페이지 >>