利用动态链接库实现界面的动态换肤

3374 人浏览 | 时间: 2016-05-04 12:33:50 | 作者: 阿郎
先看看动态换肤的实现结果:

对于动态链接库的知识,请看这三篇文章《示例程序详解MFC动态链接库》《示例程序详解win32动态链接库》《动态链接库基础详解》。
首先,我们新建一个MFC的Dll链接库程序,在这个动态链接库文件里面,我们导入两个位图文件,关于VS编译器导入位图文件的知识,有疑问的请看《在VS2010资源文件中导入电脑图片的注意事项》。然后,我们就在MFC的Dll工程中,导入两个图片。生成一下解决方案,就能生成一个dll,然后复制这个dll。我们在新建一个MFC的对话框工程,在对话框界面上添加两个按钮,分别建立两个消息响应函数:
void CChangeFaceDlg::OnBnClickedButton1()//界面1
{
	// TODO: 在此添加控件通知处理程序代码
	HMODULE hRes=LoadLibrary(L"./Interface.dll");//导入界面肤色的动态链接库
	if(hRes!=NULL)
	{
		HBITMAP hBmp=(HBITMAP)LoadImage(hRes,MAKEINTRESOURCE(9000),IMAGE_BITMAP,0,0,0);//
		if (hBmp!=NULL)
		{
			HBITMAP hOldBmp=m_FaceBmp.SetBitmap(hBmp);//设置对话框的界面
			if (hOldBmp)
			{
				DeleteObject(hOldBmp);//释放位图对象
			}
		}
		FreeLibrary(hRes);
	}

}


void CChangeFaceDlg::OnBnClickedButton2()//界面2
{
	// TODO: 在此添加控件通知处理程序代码
	HMODULE hRes=LoadLibrary(L"./Interface.dll");//导入界面肤色的动态链接库
	if(hRes!=NULL)
	{
		HBITMAP hBmp=(HBITMAP)LoadImage(hRes,MAKEINTRESOURCE(9001),IMAGE_BITMAP,0,0,0);//
		if (hBmp!=NULL)
		{
			HBITMAP hOldBmp=m_FaceBmp.SetBitmap(hBmp);//设置对话框的界面,同时赋值给一个新的句柄对象,以便删除GDI对象
			if (hOldBmp)
			{
				DeleteObject(hOldBmp);//释放GDI位图对象
			}
		}
		FreeLibrary(hRes);
	}
}

相关阅读