⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 msgwnd.cpp

📁 通信增值服务,上网接听电话
💻 CPP
字号:
// MsgWnd.cpp : implementation file
//

#include "stdafx.h"
#include "netpro.h"
#include "MsgWnd.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// CMsgWnd

CMsgWnd::CMsgWnd()
{
	// determine default font for document
	memset(&m_logfont, 0, sizeof m_logfont);
	m_logfont.lfHeight = -14;
	lstrcpy(m_logfont.lfFaceName, _T("宋体"));
	m_logfont.lfOutPrecision = OUT_TT_PRECIS;
	m_logfont.lfClipPrecision = CLIP_DEFAULT_PRECIS;
	m_logfont.lfQuality = PROOF_QUALITY;
	m_logfont.lfPitchAndFamily = FF_SWISS | VARIABLE_PITCH;
	m_logfont.lfWeight = FW_BOLD;

	m_cStatus = "欢迎使用 FFCS IP 电话";
	m_cStatus2=_T("");
	m_PhoneNum = "";
	m_sScrollLine = _T("");
	m_iTimer = 0;
	m_iTimerCount = 0;
	m_iPos = 100;
	/*
	m_pdcMemory = new CDC;
	m_pBitmap = new CBitmap;
	*/
	m_bOnline = FALSE;
	
}

CMsgWnd::~CMsgWnd()
{
	/*
	delete m_pBitmap;
	delete m_pdcMemory;
	*/
}


BEGIN_MESSAGE_MAP(CMsgWnd, CStatic)
	//{{AFX_MSG_MAP(CMsgWnd)
	ON_WM_PAINT()
	ON_WM_DRAWITEM()
	ON_WM_TIMER()
	ON_WM_CLOSE()
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

void CMsgWnd::PaintFlame(CDC* pDC)
{
	CString cValue;
	int i,j;
	i=0,j=3;
	BOOL m_bUseOwnDC;
	CFont fontStroke;
	CFont *oldFont;
	CBrush brushStroke;
	CBrush *oldBrush;
	CPen penStroke;
	CPen *oldPen;
	CDC dcMem;
	CBitmap bitmap;
	CPoint point;

    CString cCallAll;
	RECT Rect,TextRect;
	GetClientRect(&Rect);
	//GetClientRect(&m_MsgRect);
	
	if(pDC==NULL)
	{
		pDC = GetDC();
		m_bUseOwnDC = TRUE;
	}
	else
		m_bUseOwnDC = FALSE;

	m_pImageList = new CImageList();
	ASSERT(m_pImageList != NULL);    // serious allocation failure checking
	m_pImageList->Create(IDB_BITMAP_LED,16,6,RGB(255,0,255));

	dcMem.CreateCompatibleDC(pDC);

	HANDLE hBitmap;
	hBitmap = LoadImage(AfxGetApp()->m_hInstance,"res\\skin.bmp",IMAGE_BITMAP,0,0,LR_LOADFROMFILE);
	if(hBitmap!=NULL)
		bitmap.Attach((HBITMAP)hBitmap);
	else
		bitmap.LoadBitmap(IDB_BKGROUND);

	CBitmap* oldBitmap = dcMem.SelectObject(&bitmap);

	if(!brushStroke.CreateSolidBrush(RGB(0,0,0)))
		return;
	if(!penStroke.CreatePen(PS_SOLID,1,RGB(0,0,0)))
		return;
	
	oldBrush = dcMem.SelectObject(&brushStroke);
	oldPen = dcMem.SelectObject(&penStroke);
	//dcMem.Rectangle(&Rect);
	//dcMem.SelectObject(oldBrush);
	dcMem.SelectObject(oldPen);
	penStroke.DeleteObject();
	if(!penStroke.CreatePen(PS_SOLID,1,RGB(250,50,0)))
		return;
	oldPen=dcMem.SelectObject(&penStroke);
	//just paint
	if(!fontStroke.CreateFontIndirect(&m_logfont))
		return;
	oldFont = dcMem.SelectObject(&fontStroke);
	dcMem.SetTextColor(RGB(240,240,30));
	dcMem.SetBkColor(RGB(0,0,0));
	dcMem.SetBkMode(TRANSPARENT);
	cValue=_T("本机电话号码:");
	cValue+=m_PhoneNum;
	TextRect.left=i;
	TextRect.top=j;
	TextRect.right=Rect.right;
	TextRect.bottom=j+25;
	point.x =Rect.right - 20;
	point.y=j;
	dcMem.ExtTextOut(i,j,ETO_CLIPPED,&TextRect,(LPCTSTR)cValue,cValue.GetLength(),NULL);
	m_pImageList->Draw(&dcMem,m_bOnline?3:((m_iPos%20)<10?0:1),point,ILD_TRANSPARENT);
	delete m_pImageList;

	cValue = m_cStatus;
	j+=25;
	TextRect.left=i;
	TextRect.top=j;
	TextRect.right=Rect.right;
	TextRect.bottom=j+25;

	if(cValue.Left(4)!="接受"||((m_iPos%40)<10?0:1)){
			dcMem.ExtTextOut(i,j,ETO_CLIPPED,&TextRect,(LPCTSTR)cValue,cValue.GetLength(),NULL);
	}
	//TextOut(i,j,(LPCTSTR)cValue,cValue.GetLength());
//Line 3
	cValue = m_cStatus2;
	cValue += m_cDialUp;
    j+=26;
	TextRect.left=i;
	TextRect.top=j;
	TextRect.right=Rect.right;
	TextRect.bottom=Rect.bottom;
	m_MsgRect = TextRect;
	m_sizeText = dcMem.GetTextExtent(cValue);
	dcMem.ExtTextOut(Rect.right-(int)m_iPos%(Rect.right+m_sizeText.cx),j,ETO_CLIPPED,&TextRect,(LPCTSTR)cValue,cValue.GetLength(),NULL);

	/*cCallAll="呼叫号码:";
    cCallAll+=m_cCallNumber;
	j+=26;
	TextRect.left=i;
	TextRect.top=j;
	TextRect.right=Rect.right;
	TextRect.bottom=Rect.bottom;
	dcMem.ExtTextOut(i,j,ETO_CLIPPED,&TextRect,(LPCTSTR)cCallAll,cCallAll.GetLength(),NULL);
	*/
//Line 4
/*	j+=26;
	TextRect.left=i;
	TextRect.top=j;
	TextRect.right=Rect.right;
	TextRect.bottom=Rect.bottom;
	dcMem.ExtTextOut(i,j,ETO_CLIPPED,&TextRect,(LPCTSTR)m_cDialUp,m_cDialUp.GetLength(),NULL);
*/
	pDC->BitBlt(0,0,Rect.right-Rect.left,Rect.bottom - Rect.top,&dcMem,0,0,SRCCOPY);
	dcMem.SelectObject(oldFont);
	dcMem.SelectObject(oldPen);
	dcMem.SelectObject(oldBrush);
	dcMem.SelectObject(oldBitmap);

	penStroke.DeleteObject();
	fontStroke.DeleteObject();
	brushStroke.DeleteObject();
	if(m_bUseOwnDC)
		ReleaseDC(pDC);
}

/////////////////////////////////////////////////////////////////////////////
// CMsgWnd message handlers

void CMsgWnd::OnPaint() 
{
	CPaintDC dc(this); // device context for painting
	PaintFlame(&dc);
 /*以下是将输出先写入MemDC,再将所得位图直接画入DC的做法
   if(m_pdcMemory->GetSafeHdc()!=NULL){
	CRect rectUpdate;
    dc.GetClipBox(&rectUpdate);
    CBitmap* pOldBitmap = m_pdcMemory->SelectObject(m_pBitmap);
    m_pdcMemory->SelectClipRgn(NULL);
    m_pdcMemory->IntersectClipRect(&rectUpdate);
    CBrush backgroundBrush((COLORREF) ::GetSysColor(COLOR_WINDOW));
    CBrush* pOldBrush = m_pdcMemory->SelectObject(&backgroundBrush);
    m_pdcMemory->PatBlt(rectUpdate.left, rectUpdate.top,
                        rectUpdate.Width(), rectUpdate.Height(),
                        PATCOPY); 
	PaintFlame(m_pdcMemory);
    //OnDraw(m_pdcMemory);
    dc.BitBlt(rectUpdate.left, rectUpdate.top,
              rectUpdate.Width(), rectUpdate.Height(),
              m_pdcMemory, rectUpdate.left, rectUpdate.top,
              SRCCOPY);
    m_pdcMemory->SelectObject(pOldBitmap);
    m_pdcMemory->SelectObject(pOldBrush);
	}
*/
	// Do not call CStatic::OnPaint() for painting messages
}

void CMsgWnd::OnDrawItem(int nIDCtl, LPDRAWITEMSTRUCT lpDrawItemStruct) 
{
	
	CStatic::OnDrawItem(nIDCtl, lpDrawItemStruct);
	/*
	CDC* pDC = GetDC();
	PaintFlame(pDC);
	ReleaseDC(pDC);
	*/
	
}

void CMsgWnd::OnTimer(UINT nIDEvent) 
{
	//m_sScrollLine = m_cStatus2;
	//m_sScrollLine = m_cDialUp;
	//if(m_sScrollLine!=_T(""))
	//	m_sScrollLine = m_sScrollLine.Right(m_sScrollLine.GetLength()-(int)m_iTimerCount%m_sScrollLine.GetLength());
	//m_iTimerCount++;
	if(m_iPos==60000)
		m_iPos=0;
	else
		m_iPos+=3;
/*	CDC* pDC = GetDC();
	PaintFlame(pDC);
	ReleaseDC(pDC);
*/
	//InvalidateRect(&m_MsgRect,FALSE);
	Invalidate(FALSE);
	CStatic::OnTimer(nIDEvent);
}

BOOL CMsgWnd::StartTimer()
{
	m_iTimer = SetTimer(201,100,NULL);
	if(m_iTimer)
		return TRUE;
	else
		return FALSE;

}

BOOL CMsgWnd::StopTimer()
{
	if(m_iTimer)
	{
		KillTimer(m_iTimer);
		m_iTimer = 0;
		m_iTimerCount = 0;
	}
	return TRUE;
}

void CMsgWnd::OnClose() 
{
	StopTimer();	
	CStatic::OnClose();
}

BOOL CMsgWnd::Create(LPCTSTR lpszClassName, LPCTSTR lpszWindowName, DWORD dwStyle, const RECT& rect, CWnd* pParentWnd, UINT nID, CCreateContext* pContext) 
{
	if(CWnd::Create(lpszClassName, lpszWindowName, dwStyle, rect, pParentWnd, nID, pContext))
	{
		/*Don't delete these comments	
		GetClientRect(&m_SizeTotal);
			CClientDC dc(this);
			m_pdcMemory->CreateCompatibleDC(&dc);
			// makes bitmap same size as display window
			m_pBitmap->CreateCompatibleBitmap(&dc, m_SizeTotal.right,
											  m_SizeTotal.bottom);
		*/
		return TRUE;
	}
	return FALSE;
	
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -