滚动的CStatic

#pragma once

// CGoGoStatic

class CGoGoStatic : public CStatic
{
    DECLARE_DYNAMIC(CGoGoStatic)

public:
    CGoGoStatic();
   
virtual ~CGoGoStatic();

   
void GoGo();
   
void Stop();
   
void EndGoGo();

protected:
    DECLARE_MESSAGE_MAP()
   
void CalcTextSize();
    CPoint m_ptStart;
    CSize m_szText;

public:
    afx_msg
void OnTimer(UINT nIDEvent);
    afx_msg
void OnPaint();
};

 

// GoGoStatic.cpp : 实现文件
//

#include
"stdafx.h"
#include
"DialogQuestion.h"
#include
"./gogostatic.h"

#define ID_TIMER_GOGO 888888

// CGoGoStatic

IMPLEMENT_DYNAMIC(CGoGoStatic, CStatic)
CGoGoStatic::CGoGoStatic()
: m_ptStart(
0)
, m_szText(
0)
{
}

CGoGoStatic::
~CGoGoStatic()
{
}


BEGIN_MESSAGE_MAP(CGoGoStatic, CStatic)
    ON_WM_TIMER()
    ON_WM_PAINT()
END_MESSAGE_MAP()



// CGoGoStatic 消息处理程序


void CGoGoStatic::OnTimer(UINT nIDEvent)
{
   
// TODO: 在此添加消息处理程序代码和/或调用默认值
    if ( nIDEvent == ID_TIMER_GOGO )
    {
        m_ptStart.x
-= 2;

        CRect rtClient;
        GetClientRect(
&rtClient);
        rtClient.NormalizeRect();
       
if ( m_ptStart.x+m_szText.cx < rtClient.left )
            m_ptStart.x
= rtClient.right - 2;

        ShowWindow(SW_HIDE);
        ShowWindow(SW_NORMAL);
    }

    CStatic::OnTimer(nIDEvent);
}

void CGoGoStatic::OnPaint()
{
    CPaintDC dc(
this); // device context for painting
    CString strText;
    GetWindowText(strText);
    CRect rtClient;
    GetClientRect(
&rtClient);
    CRgn rgnClip;
    rgnClip.CreateRectRgn(rtClient.left, rtClient.top, rtClient.right, rtClient.bottom);
    dc.SelectClipRgn(
&rgnClip);
   
int nOldBkMode = dc.SetBkMode(TRANSPARENT);
    CGdiObject
* pOldObj = dc.SelectStockObject(DEFAULT_GUI_FONT);
    dc.TextOut(m_ptStart.x, m_ptStart.y, strText);
    dc.SelectObject(pOldObj);
    dc.SetBkMode(nOldBkMode);
    dc.SelectClipRgn(NULL);
}

void CGoGoStatic::GoGo()
{
    KillTimer(ID_TIMER_GOGO);
    CalcTextSize();
    SetTimer(ID_TIMER_GOGO,
100, NULL);
}

void CGoGoStatic::Stop()
{
    KillTimer(ID_TIMER_GOGO);
}

void CGoGoStatic::EndGoGo()
{
    KillTimer(ID_TIMER_GOGO);
    m_ptStart
= 0;
    ShowWindow(SW_HIDE);
    ShowWindow(SW_NORMAL);
}

void CGoGoStatic::CalcTextSize()
{
    CString strText;
    GetWindowText(strText);
    CDC
* pDC = GetDC();
    pDC
->SelectStockObject(DEFAULT_GUI_FONT);
    m_szText
= pDC->GetTextExtent(strText);
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值