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); }
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。