MFC对话框中实现走马灯效果

 更新时间:2020年05月30日 14:07:37   作者:Been_Stone  
这篇文章主要为大家详细介绍了MFC对话框中实现走马灯效果,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

本文实例为大家分享了MFC对话框中实现走马灯,文字信息循环播放显示效果,供大家参考,具体内容如下

CMFCDlg.h 对话框

// CMFCDlg.h 对话框
class CMFCDlg : public CDialogEx
{
// 构造
public:
 CMFCDlg(CWnd* pParent = nullptr); // 标准构造函数

// 对话框数据
#ifdef AFX_DESIGN_TIME
 enum { IDD = IDD_DLG_M };
#endif

// 实现
protected:
 HICON m_hIcon;
 int m_nLeft;
 CString m_szText;
 virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 支持
 // 生成的消息映射函数
 virtual BOOL OnInitDialog();
 afx_msg void OnPaint();
 afx_msg HCURSOR OnQueryDragIcon();
 DECLARE_MESSAGE_MAP()
public:
 afx_msg void OnTimer(UINT_PTR nIDEvent);
};

MFCDlg.cpp: 实现文件

// MFCDlg.cpp: 实现文件


#include "pch.h"
#include "framework.h"
#include "MFC.h"
#include "MFCDlg.h"
#include "afxdialogex.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#endif

// CMFCDlg 对话框

CMFCDlg::CMFCDlg(CWnd* pParent /*=nullptr*/)
 : CDialogEx(IDD_DLG_M, pParent)
{
 m_szText = _T("这是一条循环播放的信息 ");
 m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}

void CMFCDlg::DoDataExchange(CDataExchange* pDX)
{
 CDialogEx::DoDataExchange(pDX);
}

BEGIN_MESSAGE_MAP(CMFCDlg, CDialogEx)
 ON_WM_PAINT()
 ON_WM_QUERYDRAGICON()
 ON_WM_TIMER()
END_MESSAGE_MAP()


// CMFCDlg 消息处理程序

BOOL CMFCDlg::OnInitDialog()
{
 CDialogEx::OnInitDialog();

 // 设置此对话框的图标。 当应用程序主窗口不是对话框时,框架将自动
 // 执行此操作
 SetIcon(m_hIcon, TRUE);  // 设置大图标
 SetIcon(m_hIcon, FALSE); // 设置小图标

 CRect rect;
 GetClientRect(rect);
 m_nLeft = rect.right;
 SetTimer(1, 60, NULL);
 
 return TRUE; // 除非将焦点设置到控件,否则返回 TRUE
}

// 如果向对话框添加最小化按钮,则需要下面的代码
// 来绘制该图标。 对于使用文档/视图模型的 MFC 应用程序,
// 这将由框架自动完成。

void CMFCDlg::OnPaint()
{
 if (IsIconic())
 {
 CPaintDC dc(this); // 用于绘制的设备上下文

 SendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM>(dc.GetSafeHdc()), 0);

 // 使图标在工作区矩形中居中
 int cxIcon = GetSystemMetrics(SM_CXICON);
 int cyIcon = GetSystemMetrics(SM_CYICON);
 CRect rect;
 GetClientRect(&rect);
 int x = (rect.Width() - cxIcon + 1) / 2;
 int y = (rect.Height() - cyIcon + 1) / 2;

 // 绘制图标
 dc.DrawIcon(x, y, m_hIcon);
 }
 else
 {
 CDialogEx::OnPaint();
 }
}

//当用户拖动最小化窗口时系统调用此函数取得光标
//显示。
HCURSOR CMFCDlg::OnQueryDragIcon()
{
 return static_cast<HCURSOR>(m_hIcon);
}


void CMFCDlg::OnTimer(UINT_PTR nIDEvent)
{
 CRect rt;
 GetClientRect(rt);
 CClientDC dc(this);
 dc.SetBkColor(GetSysColor(COLOR_3DFACE));
 dc.SelectObject(GetFont());
 CSize size = dc.GetOutputTextExtent(m_szText);
 dc.TextOut(m_nLeft, rt.Height() - size.cy, m_szText);
 m_nLeft -= 5;
 if (m_nLeft + size.cx <= 0)
 m_nLeft = rt.right;
 CDialogEx::OnTimer(nIDEvent);
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • C++11 关键字 const 使用小结

    C++11 关键字 const 使用小结

    const大致意思是“我承诺不改变这个值”。主要用于说明接口,这样在把变量传入函数时就不必担心变量会在函数内被改变,本文给大家介绍C++11 关键字 const 使用小结,感兴趣的朋友一起看看吧
    2021-12-12
  • C++ OpenCV实战之零部件的自动光学检测

    C++ OpenCV实战之零部件的自动光学检测

    这篇文章主要为大家介绍一个C++ OpenCV的实战——零部件的自动光学检测,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下
    2022-09-09
  • C语言中的数组和指针汇编代码分析实例

    C语言中的数组和指针汇编代码分析实例

    这篇文章主要介绍了C语言中的数组和指针汇编代码分析实例,本文用一则C语言例子来得到对应的汇编代码,并一一注解每句汇编代码的含义,需要的朋友可以参考下
    2015-06-06
  • C++位操作的常见用法小结

    C++位操作的常见用法小结

    这篇文章主要介绍了C++位操作的常见用法,包括了判断奇偶、交换两个数、正负转换、求绝对值等,需要的朋友可以参考下
    2014-09-09
  • C语言进阶教程之循环语句缺陷详析

    C语言进阶教程之循环语句缺陷详析

    循环语句是用于重复执行某条语句(循环体)的语句,它包含一个控制表达式,每循环执行一次都要对控制表达式进行判断,如果表达式为真,则继续执行循环,这篇文章主要给大家介绍了关于C语言进阶教程之循环语句缺陷的相关资料,需要的朋友可以参考下
    2021-08-08
  • C++11/C++14中constexpr的使用案例详解

    C++11/C++14中constexpr的使用案例详解

    C++11规定,允许将变量声明为constexpr类型以便由编译器来验证变量的值是否是一个常量表达式,这篇文章主要介绍了C++11/C++14中constexpr的使用,需要的朋友可以参考下
    2023-06-06
  • C++类中的特殊成员函数示例详解

    C++类中的特殊成员函数示例详解

    这篇文章主要给大家介绍了关于C++类中特殊成员函数的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-02-02
  • C++内存分布及用法

    C++内存分布及用法

    这篇文章主要介绍了C++内存分布及用法,从内存的基础概念到内存分配进行了讲解,内存是我们开发中最重要的一部分,往往逻辑上的错误就会造成内存泄漏,导致程序无法运行,下面我们就来了解文章对该内容的详细介绍
    2021-12-12
  • C语言二叉树层序遍历

    C语言二叉树层序遍历

    这篇文章主要介绍了C语言二叉树层序遍历,文章基于C语言的相关资料展开详细的文章内容,具有一定的参考价值,需要的小伙伴可以参考一下,希望对你的学习有所帮助
    2022-04-04
  • C++ LeetCode1832题解判断句子是否为全字母句

    C++ LeetCode1832题解判断句子是否为全字母句

    这篇文章主要为大家介绍了C++ LeetCode1832题解判断句子是否为全字母句示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-12-12

最新评论