201 lines
8.8 KiB
C++
201 lines
8.8 KiB
C++
// DLG_ShowWarning.cpp: 实现文件
|
||
//
|
||
|
||
#include "stdafx.h"
|
||
#include "SmsManager.h"
|
||
#include "DLG_ShowWarning.h"
|
||
#include "afxdialogex.h"
|
||
#include "MemdcR.h"
|
||
#include "MainFrm.h"
|
||
|
||
// DLG_ShowWarning 对话框
|
||
|
||
IMPLEMENT_DYNAMIC(DLG_ShowWarning, CDialogEx)
|
||
|
||
DLG_ShowWarning::DLG_ShowWarning(CWnd* pParent /*=nullptr*/)
|
||
: CDialogEx(IDD_SHOWWARNING, pParent)
|
||
{
|
||
m_lCount = 0;
|
||
m_pMainFrame = NULL;
|
||
m_ppDlgWarning = NULL;
|
||
}
|
||
|
||
DLG_ShowWarning::~DLG_ShowWarning()
|
||
{
|
||
}
|
||
|
||
void DLG_ShowWarning::DoDataExchange(CDataExchange* pDX)
|
||
{
|
||
CDialogEx::DoDataExchange(pDX);
|
||
}
|
||
|
||
|
||
BEGIN_MESSAGE_MAP(DLG_ShowWarning, CDialogEx)
|
||
ON_WM_CLOSE()
|
||
ON_WM_PAINT()
|
||
ON_WM_LBUTTONDOWN()
|
||
ON_WM_TIMER()
|
||
END_MESSAGE_MAP()
|
||
|
||
|
||
// DLG_ShowWarning 消息处理程序
|
||
|
||
|
||
BOOL DLG_ShowWarning::OnInitDialog()
|
||
{
|
||
CDialogEx::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);
|
||
|
||
CRect rect;
|
||
GetClientRect(&rect);
|
||
::SetWindowPos(m_hWnd, HWND_TOPMOST, 0, 0, rect.Width(), rect.Height() + 20, SWP_NOMOVE);
|
||
|
||
SetTimer(1, 100, NULL);
|
||
|
||
return TRUE; // return TRUE unless you set the focus to a control
|
||
// 异常: OCX 属性页应返回 FALSE
|
||
}
|
||
|
||
|
||
void DLG_ShowWarning::OnClose()
|
||
{
|
||
KillTimer(1);
|
||
KillTimer(2);
|
||
KillTimer(3);
|
||
|
||
|
||
if (m_ppDlgWarning)
|
||
{
|
||
*m_ppDlgWarning = NULL;
|
||
}
|
||
|
||
CDialogEx::OnClose();
|
||
this->DestroyWindow();
|
||
delete this;
|
||
}
|
||
|
||
void DLG_ShowWarning::SetParam(CString strText, CWnd * pMainFrame, DLG_ShowWarning* * pdlgWarning)
|
||
{
|
||
m_strShowText = strText;
|
||
m_pMainFrame = pMainFrame;
|
||
m_ppDlgWarning = pdlgWarning;
|
||
}
|
||
|
||
void DLG_ShowWarning::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);
|
||
|
||
CFont* pOldfont = NULL;
|
||
CFont font1;
|
||
font1.CreateFont(-MulDiv(10, dc.GetDeviceCaps(LOGPIXELSY), 24),
|
||
0, 0, 0, FW_NORMAL, 0, 0, 0, GB2312_CHARSET,
|
||
OUT_STROKE_PRECIS, CLIP_STROKE_PRECIS, DRAFT_QUALITY,
|
||
VARIABLE_PITCH | FF_SWISS, _T("黑体"));
|
||
|
||
pOldfont = dc.SelectObject(&font1);
|
||
|
||
//memDC.TextOut(10, 50, m_strShowText);
|
||
RECT rect;
|
||
rect.left = 10; rect.top = 50;
|
||
rect.right = 200; rect.bottom = 200;
|
||
memDC.SetTextColor(RGB(255, 0, 0));
|
||
memDC.DrawText(m_strShowText, &rect, DT_LEFT | DT_WORDBREAK | DT_EDITCONTROL);
|
||
|
||
if (pOldfont)
|
||
dc.SelectObject(pOldfont);
|
||
font1.DeleteObject();
|
||
|
||
|
||
|
||
//恢复原来的BMP
|
||
pDispDC.SelectObject(OldBmp);
|
||
//CDialog::OnPaint();
|
||
}
|
||
|
||
|
||
void DLG_ShowWarning::OnLButtonDown(UINT nFlags, CPoint point)
|
||
{
|
||
//KillTimer(1);
|
||
//KillTimer(2);
|
||
//SetTimer(3, 30, NULL); //启动降时钟
|
||
|
||
if (m_pMainFrame)
|
||
{
|
||
((CMainFrame *)m_pMainFrame)->ShowCheckUpDlg();
|
||
}
|
||
CDialogEx::OnLButtonDown(nFlags, point);
|
||
}
|
||
|
||
|
||
void DLG_ShowWarning::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;
|
||
}
|
||
|
||
CDialogEx::OnTimer(nIDEvent);
|
||
}
|