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

(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)添加全局变量保留图片原始位置
CRect OrigRect;
在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函数。
在这里插入图片描述
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);
}

(8)在适当的地方关闭定时器
KillTimer(WMUSER_UPDATEPIC_TIMERID)

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值