【VC编程技巧】动态链接库☞1.6设计应用程序界面换肤
2012-10-12 00:17
218 查看
引言(转载请说明作者和出处):
刚休完 十一长假,又加上最近公司事挺多的,十来天没更新了文章,打算后面补上。
今天讲利用动态链接库来实现应用程序的界面换肤。原理是在动态链接库中创建应用程序需要的位图资源文件,当应用程序需要界面换肤时去加载新的位图资源。下面我看一个例子,这个例子同第一讲“【VC编程技巧】动态链接库☞1.1调用Dll中的一个图标”差不多。
效果图:
1〉创建MFCRegularDLL类型的DLL工程,DLL名:InterfaceRes.dll
2〉插入两个位图资源,resources.h
3〉编译生成InterfaceRes.dll
4〉创建换肤对话框应用程序ChangeSkin.exe,通过两个Button去调用动态库中的不同位图;相关代码如下:
刚休完 十一长假,又加上最近公司事挺多的,十来天没更新了文章,打算后面补上。
今天讲利用动态链接库来实现应用程序的界面换肤。原理是在动态链接库中创建应用程序需要的位图资源文件,当应用程序需要界面换肤时去加载新的位图资源。下面我看一个例子,这个例子同第一讲“【VC编程技巧】动态链接库☞1.1调用Dll中的一个图标”差不多。
效果图:
1〉创建MFCRegularDLL类型的DLL工程,DLL名:InterfaceRes.dll
2〉插入两个位图资源,resources.h
//{{NO_DEPENDENCIES}} // Microsoft Developer Studio generated include file. // Used by InterfaceRes.rc // //位图1 #define IDB_MAINFORM 8000 //位图2 #define IDB_SECFORM 8001 // Next default values for new objects // #ifdef APSTUDIO_INVOKED #ifndef APSTUDIO_READONLY_SYMBOLS #define _APS_NEXT_RESOURCE_VALUE 4002 #define _APS_NEXT_COMMAND_VALUE 32771 #define _APS_NEXT_CONTROL_VALUE 4000 #define _APS_NEXT_SYMED_VALUE 4000 #endif #endif
3〉编译生成InterfaceRes.dll
4〉创建换肤对话框应用程序ChangeSkin.exe,通过两个Button去调用动态库中的不同位图;相关代码如下:
void CChangeSkinDlg::OnStyleOne() { //加载动态链接库 HMODULE hRes = LoadLibrary("./InterfaceRes.dll"); if (hRes != NULL) //判断是否加载成功 { //加载动态链接库中的位图,其中8000为动态链接库中的位图资源ID值 HBITMAP hBmp = (HBITMAP)LoadImage(hRes, MAKEINTRESOURCE(8000), IMAGE_BITMAP, 0, 0, 0); if (hBmp != NULL) //判断加载位图是否成功 { //在控件中显示位图 if(m_hOldBmp != NULL) { m_hOldBmp = m_Bmp.SetBitmap(hBmp); } else { //如果控件已经设置过位图,先将其还原再设新的 m_Bmp.SetBitmap(m_hOldBmp); m_Bmp.SetBitmap(hBmp); } //释放LoadImage加载的位图资源占据的内存 if (hBmp) { DeleteObject(hBmp); } } FreeLibrary(hRes); //卸载动态链接库 } } void CChangeSkinDlg::OnStyleTwo() { //加载动态链接库 HMODULE hRes = LoadLibrary("./InterfaceRes.dll"); if (hRes != NULL) //判断是否加载成功 { //加载动态链接库中的位图,其中8001为动态链接库中的位图资源ID值 HBITMAP hBmp = (HBITMAP)LoadImage(hRes, MAKEINTRESOURCE(8001), IMAGE_BITMAP, 0, 0, 0); if (hBmp != NULL) //判断加载位图是否成功 { //在控件中显示位图 if(m_hOldBmp != NULL) { m_hOldBmp = m_Bmp.SetBitmap(hBmp); } else { //如果控件已经设置过位图,先将其还原再设新的。 m_Bmp.SetBitmap(m_hOldBmp); m_Bmp.SetBitmap(hBmp); } //释放LoadImage加载的位图资源占据的内存 if (hBmp) { DeleteObject(hBmp); } } FreeLibrary(hRes); //卸载动态链接库 } }
相关文章推荐
- 【VC编程技巧】动态链接库☞1.5设计支持多国语言应用程序
- 【转帖】VC界面编程技巧集!
- DirectUI Skin++界面解决方案 界面设计 界面开发 软件UI界面开发 软件UI界面美术设计 界面编程 界面教程 Skin VC VB C# .net pb delphi c builder GUI
- VC应用程序的界面换肤工具集合
- 【VC编程技巧】动态链接库☞1.3MFC扩展类的导出
- VB中的界面设计原则和编程技巧
- 【VC编程技巧】动态链接库☞1.1调用Dll中的一个图标
- VC界面编程技巧
- VB中的界面设计原则和编程技巧
- 【VC编程技巧】动态链接库☞1.2用模块导出接口
- 【VC编程技巧】动态链接库☞1.4进程间共享数据
- 【VC编程技巧】控件☞4.3Pictrue控件(打造成对话框分割线)
- 设计和实现 Web 应用程序界面
- VC 编程技巧 (六)
- VC++动态链接库编程之非MFC DLL
- MFC进行界面设计与编程
- VC++动态链接库(DLL)编程深入浅出
- VC++动态链接库(DLL)编程深入浅出(四) 出处:PConline
- VC++动态链接库(DLL)编程(五)――DLL典型实例
- VC++动态链接库编程之DLL典型实例