📄 msgwnd.cpp
字号:
// MsgWnd.cpp : implementation file
//
#include "stdafx.h"
#include "MsgWnd.h"
#include "SMS.h"
#include "resource.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
//---------------------------------------------------------------------------
/////////////////////////////////////////////////////////////////////////////
// CMsgWnd
CMsgWnd::CMsgWnd()
{
switch(m_iSystemStyle)
{
case 0:
m_Bitmap.LoadBitmap(MAKEINTRESOURCE(IDB_TIP_0));
break;
case 1:
m_Bitmap.LoadBitmap(MAKEINTRESOURCE(IDB_TIP_1));
break;
case 2:
m_Bitmap.LoadBitmap(MAKEINTRESOURCE(IDB_TIP_2));
break;
case 3:
m_Bitmap.LoadBitmap(MAKEINTRESOURCE(IDB_TIP_3));
break;
case 4:
m_Bitmap.LoadBitmap(MAKEINTRESOURCE(IDB_TIP_4));
break;
case 5:
m_Bitmap.LoadBitmap(MAKEINTRESOURCE(IDB_TIP_5));
break;
case 6:
m_Bitmap.LoadBitmap(MAKEINTRESOURCE(IDB_TIP_6));
break;
case 7:
m_Bitmap.LoadBitmap(MAKEINTRESOURCE(IDB_TIP_7));
break;
case 8:
m_Bitmap.LoadBitmap(MAKEINTRESOURCE(IDB_TIP_8));
break;
case 9:
m_Bitmap.LoadBitmap(MAKEINTRESOURCE(IDB_TIP_9));
break;
case 10:
m_Bitmap.LoadBitmap(MAKEINTRESOURCE(IDB_TIP_10));
break;
}
m_Bitmap.GetBitmap(&bmBitmap); //Get Bitmap Info
m_bFlag=false;
m_strMessage=_T("No Message To Show");
m_strCaption=_T("No Caption");
m_iLine=1;
m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}
CMsgWnd::~CMsgWnd()
{
}
BEGIN_MESSAGE_MAP(CMsgWnd, CWnd)
//{{AFX_MSG_MAP(CMsgWnd)
ON_WM_PAINT()
ON_WM_TIMER()
ON_WM_CREATE()
ON_WM_MOUSEMOVE()
ON_WM_KILLFOCUS()
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CMsgWnd message handlers
void CMsgWnd::CreateMsgWindow()
{
// RECT rect;
// SystemParametersInfo(SPI_GETWORKAREA,0,&rect,0);
// int y=rect.bottom-rect.top;
// int x=rect.right-rect.left;
// x=x-WIN_WIDTH;
// y=y-WIN_HEIGHT;
CreateEx(0,
AfxRegisterWndClass(
0,
::LoadCursor(AfxGetInstanceHandle(),MAKEINTRESOURCE(IDC_CURSOR1)),(HBRUSH)(COLOR_DESKTOP+1),NULL),
_T(""),
WS_POPUP|WS_EX_TOPMOST,
0,
0,
0,//bmBitmap.bmWidth, //Bitmap Width = Splash Window Width
0,//bmBitmap.bmHeight, //Bitmap Height = Splash Window Height
NULL,//AfxGetMainWnd()->GetSafeHwnd(),
NULL,
NULL);
SetTimer(ID_TIMER_POP_WINDOW,20,NULL);
}
/*
void CMsgWnd::SetPromptMessage(LPCTSTR lpszMsg)
{
lstrcpy(m_strMessage,lpszMsg);
}
*/
void CMsgWnd::SetPromptMessage(CString lpszMsg)
{
m_strMessage=lpszMsg;
}
void CMsgWnd::OnPaint()
{
CPaintDC dc(this); // device context for painting
CDC dcMemory;
CRect rect;
GetClientRect(&rect);
dcMemory.CreateCompatibleDC(NULL);
dcMemory.SelectObject(&m_Bitmap);
dc.StretchBlt(0,
0,
rect.right-rect.left,//bmBitmap.bmWidth,
rect.bottom-rect.top,//bmBitmap.bmHeight,
&dcMemory,
0,
0,
bmBitmap.bmWidth,
bmBitmap.bmHeight,
SRCCOPY);
SetIcon(m_hIcon, TRUE); // 设置大图标
SetIcon(m_hIcon, FALSE); // 设置小图标
// 使图标在工作矩形中居中
int cxIcon = GetSystemMetrics(SM_CXICON);
int cyIcon = GetSystemMetrics(SM_CYICON);
int x = (rect.Width() - cxIcon + 1) / 2;
int y = (rect.Height() - cyIcon + 1) / 2;
// 绘制图标
dc.DrawIcon(x, y, m_hIcon);
CFont font;
font.CreatePointFont(90,_T("Impact"));
dc.SelectObject(&font);
dc.SetTextColor(RGB(0,64,128));
dc.SetBkColor (RGB(255,0,0));
dc.SetBkMode(TRANSPARENT);
dc.TextOut(30,10,m_strCaption);
rect.top=30;
//dc.DrawText(m_strMessage,-1,&rect,DT_CALCRECT|DT_WORDBREAK);
CString tempStr;
int Length=m_strMessage.GetLength ();
for(int i=0;i<m_iLine; i++)//每一行显示
{
//L"我是王昌栋,我喜欢计算机,我更喜欢代码,我要用计算机改变人类!和和好非常好!非常好,不错的想法!这就是我,有激情,有动力!";
tempStr=m_strMessage;
rect.OffsetRect (0,15);
tempStr.Delete (0,i*20);
tempStr.Delete (20,Length*20-20);
dc.DrawText(tempStr,-1,&rect,DT_CENTER|DT_SINGLELINE|DT_LEFT);
}
// Do not call CWnd::OnPaint() for painting messages
}
void CMsgWnd::OnTimer(UINT nIDEvent)
{
static int nHeight=0;
int cy=GetSystemMetrics(SM_CYSCREEN);
int cx=GetSystemMetrics(SM_CXSCREEN);
RECT rect;
SystemParametersInfo(SPI_GETWORKAREA,0,&rect,0);
int y=rect.bottom-rect.top;
int x=rect.right-rect.left;
x=x-WIN_WIDTH;
switch(nIDEvent)
{
case ID_TIMER_POP_WINDOW:
if(nHeight<=WIN_HEIGHT)
{
++nHeight;
MoveWindow(x,
y-nHeight,
WIN_WIDTH,
WIN_HEIGHT);
Invalidate(FALSE);
}
else
{
KillTimer(ID_TIMER_POP_WINDOW);
SetTimer(ID_TIMER_DISPLAY_DELAY,5000,NULL);
}
break;
case ID_TIMER_CLOSE_WINDOW:
if(nHeight>=0)
{
nHeight--;
MoveWindow(x,
y-nHeight,
WIN_WIDTH,
nHeight);
}
else
{
KillTimer(ID_TIMER_CLOSE_WINDOW);
SendMessage(WM_CLOSE);
}
break;
case ID_TIMER_DISPLAY_DELAY:
KillTimer(ID_TIMER_DISPLAY_DELAY);
SetTimer(ID_TIMER_CLOSE_WINDOW,20,NULL);
break;
}
CWnd::OnTimer(nIDEvent);
}
int CMsgWnd::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CWnd::OnCreate(lpCreateStruct) == -1)
return -1;
return 0;
}
void CMsgWnd::OnMouseMove(UINT nFlags, CPoint point)
{
CRect rect;
GetClientRect(&rect);
if(rect.PtInRect(point))
{ m_bFlag=true;
KillTimer(ID_TIMER_DISPLAY_DELAY);
}
CWnd::OnMouseMove(nFlags, point);
}
void CMsgWnd::OnKillFocus(CWnd* pNewWnd)
{
CWnd::OnKillFocus(pNewWnd);
if(m_bFlag)
SetTimer(ID_TIMER_DISPLAY_DELAY,3000,NULL);
// TODO: Add your message handler code here
}
void CMsgWnd::SetPromptCaption(CString lpszCaption)
{
// lstrcpy(m_strCaption,lpszCaption);
m_strCaption=lpszCaption;
}
HCURSOR CMsgWnd::OnQueryDragIcon()
{
return static_cast<HCURSOR>(m_hIcon);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -