今天上午试了试MFC程序的换肤,上网找了个换肤的库——SkinMagic Toolkit。看了一下示例程序,感觉换肤就是这么几步:
1 将SkinMagicTrial.lib、SkinMagicLib.h拷贝到项目目录下,将SkinMagicTrial.dll拷贝到项目的debug目录下。
2 在项目的连接器设置中添加SkinMagicTrial.lib文件
3 在StdAfx.h中包含SkinMagicLib.h头文件
4 在InitInstance()中添加InitSkinMagicLib()、LoadSkinFile()、SetWindowSkin()、SetDialogSkin()函数
5 然后在CMainFrame中添加两个成员变量:
编译程序,就可以实现换肤了。但这个库有个问题就是需要注册,否则在程序运行前会弹出一个对话框提示注册,并且它的设计其职能使用15天。
1 将SkinMagicTrial.lib、SkinMagicLib.h拷贝到项目目录下,将SkinMagicTrial.dll拷贝到项目的debug目录下。
2 在项目的连接器设置中添加SkinMagicTrial.lib文件
3 在StdAfx.h中包含SkinMagicLib.h头文件
4 在InitInstance()中添加InitSkinMagicLib()、LoadSkinFile()、SetWindowSkin()、SetDialogSkin()函数
BOOL CSkinTestApp::InitInstance()
{
AfxEnableControlContainer();
// Standard initialization
// If you are not using these features and wish to reduce the size
// of your final executable, you should remove from the following
// the specific initialization routines you do not need.
VERIFY( 1 == InitSkinMagicLib( AfxGetInstanceHandle(), "Demo" ,
NULL,
NULL ) );
VERIFY( 1 == LoadSkinFile("xpgrean.smf") );
#ifdef _AFXDLL
Enable3dControls(); // Call this when using MFC in a shared DLL
#else
Enable3dControlsStatic(); // Call this when linking to MFC statically
#endif
// Change the registry key under which our settings are stored.
// TODO: You should modify this string to be something appropriate
// such as the name of your company or organization.
SetRegistryKey(_T("Local AppWizard-Generated Applications"));
LoadStdProfileSettings(); // Load standard INI file options (including MRU)
// Register the application's document templates. Document templates
// serve as the connection between documents, frame windows and views.
CSingleDocTemplate* pDocTemplate;
pDocTemplate = new CSingleDocTemplate(
IDR_MAINFRAME,
RUNTIME_CLASS(CSkinTestDoc),
RUNTIME_CLASS(CMainFrame), // main SDI frame window
RUNTIME_CLASS(CSkinTestView));
AddDocTemplate(pDocTemplate);
// Parse command line for standard shell commands, DDE, file open
CCommandLineInfo cmdInfo;
ParseCommandLine(cmdInfo);
// Dispatch commands specified on the command line
if (!ProcessShellCommand(cmdInfo))
return FALSE;
VERIFY( 1 == SetWindowSkin( m_pMainWnd->m_hWnd , "MainFrame" ));
VERIFY( 1 == SetDialogSkin( "Dialog" ) );
((CMainFrame*)m_pMainWnd)->m_bSkinned = TRUE;
((CMainFrame*)m_pMainWnd)->m_nIndex = 0;
// The one and only window has been initialized, so show and update it.
m_pMainWnd->ShowWindow(SW_SHOW);
m_pMainWnd->UpdateWindow();
return TRUE;
}
{
AfxEnableControlContainer();
// Standard initialization
// If you are not using these features and wish to reduce the size
// of your final executable, you should remove from the following
// the specific initialization routines you do not need.
VERIFY( 1 == InitSkinMagicLib( AfxGetInstanceHandle(), "Demo" ,
NULL,
NULL ) );
VERIFY( 1 == LoadSkinFile("xpgrean.smf") );
#ifdef _AFXDLL
Enable3dControls(); // Call this when using MFC in a shared DLL
#else
Enable3dControlsStatic(); // Call this when linking to MFC statically
#endif
// Change the registry key under which our settings are stored.
// TODO: You should modify this string to be something appropriate
// such as the name of your company or organization.
SetRegistryKey(_T("Local AppWizard-Generated Applications"));
LoadStdProfileSettings(); // Load standard INI file options (including MRU)
// Register the application's document templates. Document templates
// serve as the connection between documents, frame windows and views.
CSingleDocTemplate* pDocTemplate;
pDocTemplate = new CSingleDocTemplate(
IDR_MAINFRAME,
RUNTIME_CLASS(CSkinTestDoc),
RUNTIME_CLASS(CMainFrame), // main SDI frame window
RUNTIME_CLASS(CSkinTestView));
AddDocTemplate(pDocTemplate);
// Parse command line for standard shell commands, DDE, file open
CCommandLineInfo cmdInfo;
ParseCommandLine(cmdInfo);
// Dispatch commands specified on the command line
if (!ProcessShellCommand(cmdInfo))
return FALSE;
VERIFY( 1 == SetWindowSkin( m_pMainWnd->m_hWnd , "MainFrame" ));
VERIFY( 1 == SetDialogSkin( "Dialog" ) );
((CMainFrame*)m_pMainWnd)->m_bSkinned = TRUE;
((CMainFrame*)m_pMainWnd)->m_nIndex = 0;
// The one and only window has been initialized, so show and update it.
m_pMainWnd->ShowWindow(SW_SHOW);
m_pMainWnd->UpdateWindow();
return TRUE;
}
5 然后在CMainFrame中添加两个成员变量:
public
:
int m_nIndex;
BOOL m_bSkinned;
int m_nIndex;
BOOL m_bSkinned;
编译程序,就可以实现换肤了。但这个库有个问题就是需要注册,否则在程序运行前会弹出一个对话框提示注册,并且它的设计其职能使用15天。