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++类中的常量介绍

    C++类中的常量介绍

    const数据成员只在某个对象生存期内是常量,而对于整个类而言却是可变的,因为类可以创建多个对象,不同的对象其const数据成员的值可以不同
    2013-10-10
  • 教你Visual Studio 2022如何新建一个C语言工程(图文详解)

    教你Visual Studio 2022如何新建一个C语言工程(图文详解)

    这篇文章主要介绍了Visual Studio 2022如何新建一个C语言工程,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-09-09
  • C语言实现计算圆周长以及面积

    C语言实现计算圆周长以及面积

    这篇文章主要介绍了C语言实现计算圆周长以及面积方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-11-11
  • C++超详细讲解强制类型转换

    C++超详细讲解强制类型转换

    在C++语言中新增了四个关键字static_cast、const_cast、reinterpret_cast和dynamic_cast。这四个关键字都是用于强制类型转换的
    2022-05-05
  • OpenCV实现简易标定板

    OpenCV实现简易标定板

    这篇文章主要为大家详细介绍了OpenCV实现简易标定板,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-04-04
  • C++ 二维数组参数传递的实现方法

    C++ 二维数组参数传递的实现方法

    这篇文章主要介绍了C++ 二维数组参数传递的实现方法的相关资料,这里提供三种方法帮助大家实现这样的功能,需要的朋友可以参考下
    2017-08-08
  • 手把手带你学习C++的数据类型

    手把手带你学习C++的数据类型

    这篇文章主要为大家介绍了C++的数据类型,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助,希望能够给你带来帮助
    2021-11-11
  • Qt拖放操作和打印操作的实现

    Qt拖放操作和打印操作的实现

    本文主要介绍了Qt拖放操作和打印操作的实现,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-04-04
  • C++音乐播放按钮的封装过程详解

    C++音乐播放按钮的封装过程详解

    此篇文章用于记录学习C++封装音乐播放按钮,封装将对象的属性和行为作为一个整体,表现生活中的事物、将属性和行为加以权限控制,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-08-08
  • opencv3/C++ 离散余弦变换DCT方式

    opencv3/C++ 离散余弦变换DCT方式

    今天小编就为大家分享一篇opencv3/C++ 离散余弦变换DCT方式,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-12-12

最新评论