首页 » 技术分享 » MFC对话框动态刷新图片(仿照全屏屏保)

MFC对话框动态刷新图片(仿照全屏屏保)

 

最近做MFC对话框工程 用到全屏刷新图片的功能,由于功能实现比较简单,便使用CImage类配合定时器制作,下面贴上实现方式:

  增加消息响应事件:

//在对话框属性的消息中 添加WM_PAINT与WM_TIMER
//消息响应函数原型
afx_msg void OnPaint();
afx_msg void OnTimer(UINT_PTR nIDEvent);

  增加初始化函数:

//在对话框属性的重写中 添加OnInitDialog
//初始化函数原型
virtual BOOL OnInitDialog();

  .h文件定义:

//获取图片路径 这里用CString数组保存多张图片路径
bool GetPath(CStringArray & StrPath);
//保存图片的路径
CStringArray m_StrPath;
//记录当前加载哪张图片
int m_nNum;

  .cpp文件实现:

//首先在OnInitDialog()函数中添加图片计数的初始化、图片路径以及启动定时器
BOOL CTestSTLFileDlg::OnInitDialog()
{
	m_nNum = 0;
	//全屏显示
	ShowWindow(SW_MAXIMIZE);
	//获取图片路径
	GetPath(m_StrPath);
	//启动定时器
	SetTimer(1,1000,NULL);
	return TRUE;  // 除非将焦点设置到控件,否则返回 TRUE
}


//在OnPaint()函数的else 中添加图片绘制部分
void CTestSTLFileDlg::OnPaint()
{
if()//主对话框中自动生成,如果是子对话框 直接拷贝下面else内的代码就行
{
}
else
{
		CPaintDC dc(this); // 用于绘制的设备上下文
		CRect _GetGroup;
		this->GetWindowRect(_GetGroup);
		CImage image;  
		//这里用了2张图片做演示
		image.Load(m_StrPath.GetAt(m_nNum++ %2));  				image.Draw(dc.GetSafeHdc(),_GetGroup.left,_GetGroup.top,_GetGroup.right,_GetGroup.bottom);
		if (!image.IsNull())
		{
			image.Destroy();
		}
		CDialogEx::OnPaint();
}
}


//获取图片路径函数
bool CTestSTLFileDlg::GetPath(CStringArray & StrPath)
{
	TCHAR strTemp[MAX_PATH];
	GetCurrentDirectory(MAX_PATH,strTemp);
	//测试增加2张图片
	for (int i = 0;i < 2;i++)
	{
		CString str;
		str.Format(_T("%s\\res\\test%d.png"),strTemp,i + 1);
		//保存图片路径
		StrPath.Add(str);
	}
	return true;
}


//定时器函数
void CTestSTLFileDlg::OnTimer(UINT_PTR nIDEvent)
{
	// TODO: 在此添加消息处理程序代码和/或调用默认值
	if (1 == nIDEvent)
	{
		//重绘图片
		Invalidate(TRUE);
	}
	CDialogEx::OnTimer(nIDEvent);
}


//在析构函数或者退出函数中释放定时器
CTestSTLFileDlg::~CTestSTLFileDlg()
{
	KillTimer(1);
}

  到这里对话框动态刷新图片功能基本完成,剩下还需要在主类(与工程名相同的类)中增加GDI启动函数;

  主类的.cpp中增加:

 //全局变量
 ULONG_PTR m_gdi;
 
 //构造函数或者初始化函数中增加GDI启动
CTestSTLFileApp::CTestSTLFileApp()
{
	// 将所有重要的初始化放置在 InitInstance 中
	Gdiplus::GdiplusStartupInput out;
	Gdiplus::GdiplusStartup(&m_gdi,&out,NULL);

}

//在析构函数或者退出函数中释放GDI内存
CTestSTLFileApp::~CTestSTLFileApp()
{
	Gdiplus::GdiplusShutdown(m_gdi);
}

转载自原文链接, 如需删除请联系管理员。

原文链接:MFC对话框动态刷新图片(仿照全屏屏保),转载请注明来源!

0