牛骨文教育服务平台(让学习变的简单)
博文笔记

MFC利用定时器实现图片移动

创建时间:2018-10-19 投稿人: 浏览次数:306

(1)在窗口中放入Picture Static控件,并设置控件图片属性为Bitmap,如图所示

设置控件属性
(2)插入资源图片
选择Resource视图,插入需要的加载的图片资源。
选择资源视图,右键
插入bitmap图片
修改图片ID
(3)设置需要显示的图片
HBITMAP hmap;
//IDB_BITMAP_SEARCH为需要加载的图片
hmap = LoadBitmap(AfxGetInstanceHandle(),MAKEINTRESOURCE(IDB_BITMAP_SEARCH));
//m_PictrlSearch为Picture Static控件绑定的变量
m_PictrlSearch.SetBitmap(hmap);

(4)添加全局变量保留图片原始位置
```
// A code block
CRect OrigRect;

// An highlighted block

在OnInitDialog函数中存储图片原始的位置
m_PictrlSearch.GetClientRect(&OrigRect);
m_PictrlSearch.ClientToScreen(OrigRect);
ScreenToClient(OrigRect);

(5)添加定时器ID
#define WMUSER_UPDATEPIC_TIMERID WM_USER + 1001

(6)开启定时器
在指定的地方,开启定时器,设置时长(比如在按钮事件响应函数中)
SetTimer(WMUSER_UPDATEPIC_TIMERID,100,NULL);//定时时间为100ms

(7)重载OnTimer函数。
在这里插入图片描述

// A code block
void XXXXDlg::OnTimer(UINT_PTR nIDEvent)
{
	// TODO: Add your message handler code here and/or call default
	switch (nIDEvent)
	{
	case WMUSER_UPDATEPIC_TIMERID:
		CRect curCRT;
		m_PictrlSearch.GetClientRect(&curCRT);
		m_PictrlSearch.ClientToScreen(curCRT);
		ScreenToClient(curCRT);
		m_PictrlSearch.MoveWindow(curCRT.left+10,curCRT.top,curCRT.Width(),curCRT.Height(),TRUE); //每次向右移动10个像素
		if(curCRT.left + curCRT.Width() > 265)  //到达指定的位置之后
		{
			m_PictrlSearch.MoveWindow(OrigRect,TRUE);  //返回原点
		}
		break;
	}
	CDialogEx::OnTimer(nIDEvent);
}
// An highlighted block
声明:该文观点仅代表作者本人,牛骨文系教育信息发布平台,牛骨文仅提供信息存储空间服务。