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

MFC 专栏收录该内容
1 篇文章 0 订阅

(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)

  • 0
    点赞
  • 2
    评论
  • 25
    收藏
  • 打赏
    打赏
  • 扫一扫,分享海报

©️2022 CSDN 皮肤主题:技术黑板 设计师:CSDN官方博客 返回首页

打赏作者

北辰溪1991

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

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

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

打赏作者

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

抵扣说明:

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

余额充值