用实例解析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);}
看完这篇关于用实例解析MFC对话框中如何实现走马灯效果的文章,如果觉得文章内容写得不错的话,可以把它分享出去给更多人看到。
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。