MFC对话框中实现走马灯效果
本文实例为大家分享了MFC对话框中实现走马灯,文字信息循环播放显示效果,供大家参考,具体内容如下
CMFCDlg.h对话框
//CMFCDlg.h对话框
classCMFCDlg:publicCDialogEx
{
//构造
public:
CMFCDlg(CWnd*pParent=nullptr);//标准构造函数
//对话框数据
#ifdefAFX_DESIGN_TIME
enum{IDD=IDD_DLG_M};
#endif
//实现
protected:
HICONm_hIcon;
intm_nLeft;
CStringm_szText;
virtualvoidDoDataExchange(CDataExchange*pDX);//DDX/DDV支持
//生成的消息映射函数
virtualBOOLOnInitDialog();
afx_msgvoidOnPaint();
afx_msgHCURSOROnQueryDragIcon();
DECLARE_MESSAGE_MAP()
public:
afx_msgvoidOnTimer(UINT_PTRnIDEvent);
};
MFCDlg.cpp:实现文件
//MFCDlg.cpp:实现文件
#include"pch.h"
#include"framework.h"
#include"MFC.h"
#include"MFCDlg.h"
#include"afxdialogex.h"
#ifdef_DEBUG
#definenewDEBUG_NEW
#endif
//CMFCDlg对话框
CMFCDlg::CMFCDlg(CWnd*pParent/*=nullptr*/)
:CDialogEx(IDD_DLG_M,pParent)
{
m_szText=_T("这是一条循环播放的信息");
m_hIcon=AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}
voidCMFCDlg::DoDataExchange(CDataExchange*pDX)
{
CDialogEx::DoDataExchange(pDX);
}
BEGIN_MESSAGE_MAP(CMFCDlg,CDialogEx)
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
ON_WM_TIMER()
END_MESSAGE_MAP()
//CMFCDlg消息处理程序
BOOLCMFCDlg::OnInitDialog()
{
CDialogEx::OnInitDialog();
//设置此对话框的图标。当应用程序主窗口不是对话框时,框架将自动
//执行此操作
SetIcon(m_hIcon,TRUE);//设置大图标
SetIcon(m_hIcon,FALSE);//设置小图标
CRectrect;
GetClientRect(rect);
m_nLeft=rect.right;
SetTimer(1,60,NULL);
returnTRUE;//除非将焦点设置到控件,否则返回TRUE
}
//如果向对话框添加最小化按钮,则需要下面的代码
//来绘制该图标。对于使用文档/视图模型的MFC应用程序,
//这将由框架自动完成。
voidCMFCDlg::OnPaint()
{
if(IsIconic())
{
CPaintDCdc(this);//用于绘制的设备上下文
SendMessage(WM_ICONERASEBKGND,reinterpret_cast(dc.GetSafeHdc()),0);
//使图标在工作区矩形中居中
intcxIcon=GetSystemMetrics(SM_CXICON);
intcyIcon=GetSystemMetrics(SM_CYICON);
CRectrect;
GetClientRect(&rect);
intx=(rect.Width()-cxIcon+1)/2;
inty=(rect.Height()-cyIcon+1)/2;
//绘制图标
dc.DrawIcon(x,y,m_hIcon);
}
else
{
CDialogEx::OnPaint();
}
}
//当用户拖动最小化窗口时系统调用此函数取得光标
//显示。
HCURSORCMFCDlg::OnQueryDragIcon()
{
returnstatic_cast(m_hIcon);
}
voidCMFCDlg::OnTimer(UINT_PTRnIDEvent)
{
CRectrt;
GetClientRect(rt);
CClientDCdc(this);
dc.SetBkColor(GetSysColor(COLOR_3DFACE));
dc.SelectObject(GetFont());
CSizesize=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);
}
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。