首页 > 其他分享 >MFC 定时器的简单用法

MFC 定时器的简单用法

时间:2024-01-26 23:12:46浏览次数:27  
标签:MESSAGEBOX 定时器 int WM dc 用法 MFC str CView

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);
}

标签:MESSAGEBOX,定时器,int,WM,dc,用法,MFC,str,CView
From: https://www.cnblogs.com/huvjie/p/17990912

相关文章

  • MFC 插入符输入文字
    在View中,三个消息事件: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)......
  • 简单使用vim编辑器的用法
    vim的使用笔记可以涵盖很多内容,以下是一些基本操作和常见命令的简要总结:启动Vim打开或创建文件:vimfilename基本模式切换正常模式(NormalMode):启动时默认进入此模式,用于执行移动、复制、删除等操作。进入插入模式:按下i、a、o或O键(在光标前/后插入文本、新行下方/上方......
  • @PostConstruct用法详解介绍
    1.@PostConstruct介绍定义:在方法上加该注解会在项目启动的时候执行该方法,也可以理解为在spring容器初始化的时候执行该方法。说明:被@PostConstruct修饰的方法会在服务器加载Servlet的时候运行,并且只会被服务器调用一次,类似于Serclet的inti()方法。被@PostConstruct修饰的方法......
  • shell括号用法汇总
    总结:${}:作用是获取变量的结果,一般情况下,$var与${var}是没有区别的,但是用${}会比较精确的界定变量名称的边界范围。$[]:进行数学运算$():命令替换操作,同反应引号``,即命令的嵌套使用,将$()中包括的命令执行结果向外传递。举例:echotodayis$(date"+%Y-%m-%d")${}与$:$与${}都......
  • [转帖]Oracle replay工具用法
    一、简介Oracle11g推出的神器,可以抓取生产环境真实负载(sql语句),在目标环境重演,进行对比。在核心生产环境迁移等重大变更前,尽量确定变更带来的影响。核心步骤包括:准备工作、捕获负载、预处理负载、重演负载、对比分析,每步又包含多个子步骤,下面通过测试案例来看。二、准备......
  • Vue 3高级响应式数据探秘:原理、用法详解与实战示例!
     在Vue3中,数据的变化通过响应式系统来实现,该系统基于ES6的Proxy对象。Proxy对象允许拦截并自定义操作,因此Vue可以通过代理对象来实现对数据的监听和触发相应的操作。以下是Vue3中监测数据改变的原理、使用方法和步骤的详细描述,以及一个实例代码:原理:Vue3的响应式系统基于P......
  • EXTI中断、TIM定时器
    一.中断系统1.中断:在主程序运行过程中,出现了特定的中断触发条件(中断源),使得CPU暂停当前正在运行的程序,转而去处理中断程序,处理完成后又返回原来被暂停的位置继续运行。2.中断优先级:当有多个中断源同时申请中断时,CPU会根据中断源的轻重缓急进行裁决,优先响应更加紧急的中断源。......
  • nmap命令的用法
    Nmap简介Nmap是一款非常强大的主机发现和端口扫描工具,而且nmap运用自带的脚本,还能完成漏洞检测,同时支持多平台。官网一般情况下,Nmap用于列举网络主机清单、管理服务升级调度、监控主机或服务运行状况。Nmap可以检测目标机是否在线、端口开放情况、侦测运行的服务类型及版本信......
  • python中for循环及用法详解
    1、for循环for循环的语法格式如下:1for迭代变量in字符串|列表|元祖|字典|集合:2代码块迭代变量用于存放从序列类型变量中读取出来的元素,所以一般不会在循环中对迭代变量手动赋值;2、用法2.1、for循环遍历数值1print("计算1+2+3+...+100的结果为:")2sum=0......
  • MFC 简单的绘图用法
    ▲效果在OnDraw函数中://CMFCApplication1View绘图voidCMFCApplication1View::OnDraw(CDC*pDC){CMFCApplication1Doc*pDoc=GetDocument();ASSERT_VALID(pDoc);if(!pDoc)return;/*a)定义画家b)定义画笔(画刷)CPen,CBrush......