CorpSms/DLG_RecvSms.cpp

175 lines
4.0 KiB
C++

// DLG_RecvSms.cpp : implementation file
//
#include "stdafx.h"
#include "CorpSms.h"
#include "DLG_RecvSms.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// DLG_RecvSms dialog
#include "Memdc.h"
DLG_RecvSms::DLG_RecvSms(CWnd* pParent /*=NULL*/)
: CDialog(DLG_RecvSms::IDD, pParent)
{
//{{AFX_DATA_INIT(DLG_RecvSms)
// NOTE: the ClassWizard will add member initialization here
//}}AFX_DATA_INIT
m_lCount = 0;
memset(m_szTitle,0,sizeof(m_szTitle));
}
void DLG_RecvSms::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(DLG_RecvSms)
// NOTE: the ClassWizard will add DDX and DDV calls here
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(DLG_RecvSms, CDialog)
//{{AFX_MSG_MAP(DLG_RecvSms)
ON_WM_PAINT()
ON_WM_CLOSE()
ON_WM_TIMER()
ON_WM_LBUTTONDOWN()
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// DLG_RecvSms message handlers
BOOL DLG_RecvSms::OnInitDialog()
{
CDialog::OnInitDialog();
CBitmap bmpMain; //用于载入教室图形
BITMAP BitMap; //用于取位图的大小
long lTemp;
lTemp = bmpMain.LoadBitmap( IDB_S_RECVSMS ); //装入位图
lTemp = bmpMain.GetBitmap( &BitMap ); //取得位图的大小
xBmp = BitMap.bmWidth+2;
yBmp = BitMap.bmHeight+2;
HDC hScrDC; // 屏幕和内存设备描述表
//为屏幕创建设备描述表
hScrDC = CreateDC(_T("DISPLAY"), NULL, NULL, NULL);
//获得屏幕分辨率
xScrn = GetDeviceCaps(hScrDC, HORZRES);
yScrn = GetDeviceCaps(hScrDC, VERTRES);
MoveWindow( xScrn , yScrn , xBmp , yBmp );
SetTimer( 1 , 100 , NULL );
return TRUE; // return TRUE unless you set the focus to a control
// EXCEPTION: OCX Property Pages should return FALSE
}
void DLG_RecvSms::OnPaint()
{
CPaintDC dc(this); // device context for painting
CMemDC_R memDC(&dc);
CDC pDispDC;
pDispDC.CreateCompatibleDC( &memDC );
CBitmap bmpMain; //用于载入教室图形
CBitmap * OldBmp; //记录旧的Bitmap
BITMAP BitMap; //用于取位图的大小
long lTemp;
lTemp = bmpMain.LoadBitmap( IDB_S_RECVSMS ); //装入位图
lTemp = bmpMain.GetBitmap( &BitMap ); //取得位图的大小
//HBITMAP bmp;
//bmp = (HBITMAP)LoadImage( NULL,"Main.bmp",IMAGE_BITMAP,0,0,LR_DEFAULTCOLOR|LR_LOADFROMFILE);
//GetObject(bmp, sizeof(BitMap), &BitMap);
//CBitmap * pbmp;
//pbmp = CBitmap::FromHandle( bmp );
//OldBmp = pDispDC.SelectObject( &bmpMain );//选入位图
OldBmp = pDispDC.SelectObject( &bmpMain );//选入位图
memDC.BitBlt( 0 , 0 , BitMap.bmWidth , BitMap.bmHeight , &pDispDC , 0 , 0 , SRCCOPY );
memDC.SetBkMode(TRANSPARENT);
if ( _tcslen(m_szTitle) > 0 )
memDC.TextOut( 50 , 15 , m_szTitle );
else
memDC.TextOut( 50 , 15 , _T("收到新消息") );
memDC.TextOut( 5 , 40 , m_Sms.szSender );
memDC.TextOut( 5 , 60 , m_Sms.szTime );
memDC.TextOut( 5 , 80 , m_Sms.szMsg );
//恢复原来的BMP
pDispDC.SelectObject( OldBmp );
CDialog::OnPaint();
}
void DLG_RecvSms::SetPara(SMS_Recv2 *pSms,const TCHAR * pTitle)
{
memcpy( &m_Sms , pSms , sizeof(m_Sms) );
if ( pTitle )
_tcscpy(m_szTitle , pTitle );
}
void DLG_RecvSms::OnClose()
{
CDialog::OnClose();
this->DestroyWindow();
delete this;
}
void DLG_RecvSms::OnTimer(UINT_PTR nIDEvent)
{
switch( nIDEvent )
{
case 1:
m_lCount +=5;
if ( m_lCount >= yBmp +50 ) //升至上限
{
KillTimer( 1 );
SetTimer(2 , 5000 , NULL ); //5秒钟后退出
return ;
}
MoveWindow( xScrn - xBmp -20 , yScrn - m_lCount , xBmp , yBmp );
break;
case 2:
KillTimer(2);
SetTimer(3 , 70 , NULL); //启动降时钟
break;
case 3:
m_lCount -=5;
if ( m_lCount <= 0 ) //降至上限
{
KillTimer( 3 );
this->OnClose();
return ;
}
MoveWindow( xScrn - xBmp -20 , yScrn - m_lCount , xBmp , yBmp );
break;
}
CDialog::OnTimer(nIDEvent);
}
void DLG_RecvSms::OnLButtonDown(UINT nFlags, CPoint point)
{
KillTimer(1);
KillTimer(2);
SetTimer(3 , 30 , NULL); //启动降时钟
CDialog::OnLButtonDown(nFlags, point);
}