// 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); }