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);
}
  • 1
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

坤昱

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值