MFC 定时器的简单用法
View
下两个消息事件:ON_WM_CREATE
ON_WM_TIMER
BEGIN_MESSAGE_MAP(CMFCApplication1View, CView)
// 标准打印命令
ON_COMMAND(ID_FILE_PRINT, &CView::OnFilePrint)
ON_COMMAND(ID_FILE_PRINT_DIRECT, &CView::OnFilePrint)
ON_COMMAND(ID_FILE_PRINT_PREVIEW, &CView::OnFilePrintPreview)
ON_WM_CREATE() // 1
ON_WM_TIMER() // 2
END_MESSAGE_MAP()
OnCreate:
int CMFCApplication1View::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CView::OnCreate(lpCreateStruct) == -1)
return -1;
//设置定时器
//1: 定时器id
//500: 时间间隔, 毫秒
//NULL: 使用系统默认的处理函数,每个500毫秒,触发WM_TIMER
SetTimer(1, 100, NULL);
return 0;
}
OnTimer:
//#define SHOW_THE_MESSAGEBOX
void CMFCApplication1View::OnTimer(UINT_PTR nIDEvent)
{
if (nIDEvent == 1)
{
#ifdef SHOW_THE_MESSAGEBOX
static int i = 0;
i++;
CString str;
str.Format(TEXT("%d"), i);
if (i == 5)
{
KillTimer(1);
}
MessageBox(str);
#endif // SHOW_THE_MESSAGEBOX
#ifndef SHOW_THE_MESSAGEBOX
static int w = 0;
w += 5;
CString str = TEXT("塑造自己的过程很疼,但是你可以得到一个更好的自己");
//获取字符串的长度(宽度)
CClientDC dc(this);
CSize size = dc.GetTextExtent(str);
//如果宽度大于字符串的宽度,重新开始
if (w > size.cx)
{
w = 0;
//重新刷新窗口
Invalidate(); //Qt 中Update()
}
int x = 50;
int y = 50;
CRect rect(x, y, x + w, y + size.cy);
//黑色写一次
dc.TextOutW(x, y, str);
//设置字体颜色
dc.SetTextColor(RGB(255, 0, 0));
// 写在这个矩形里面,覆盖在上面的黑色上面,矩形的长度多长就显示多长区域。
dc.DrawText(str, &rect, DT_LEFT);
#endif // !SHOW_THE_MESSAGEBOX
}
CView::OnTimer(nIDEvent);
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· DeepSeek 开源周回顾「GitHub 热点速览」
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了