📄 msgwnd.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 + -