歡迎您光臨本站 註冊首頁

MFC對話框中實現走馬燈效果

←手機掃碼閱讀     火星人 @ 2020-06-12 , reply:0

本文實例為大家分享了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(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(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對話框中實現走馬燈效果已經有260次圍觀

http://coctec.com/docs/vscode/show-post-238200.html