#include "GlobalFunc.h" #include "T2ArrowWnd.h" #include "T2TowerDoc.h" #include "T2TowerMainView.h" CObject* PASCAL T2ArrowWnd::CreateObject() { #line 33 return DEBUG_NEW T2ArrowWnd; } IMPLEMENT_DYNAMIC(T2ArrowWnd, CFrameWnd); T2ArrowWnd::T2ArrowWnd() { } /*virtual*/ T2ArrowWnd::~T2ArrowWnd() { } static POINT rgnPoints[7] = { {20,35}, {0, 15}, {10,15}, {10,0}, {30,0}, {30,15}, {40,15} }; void T2ArrowWnd::Show(int inX, int inY, T2TowerDoc* inDoc) { mWndClass = AfxRegisterWndClass(CS_NOCLOSE, NULL, (HBRUSH) GetStockObject(WHITE_BRUSH)); CRect rect1(0, 0, 50, 50); Create(mWndClass, "ArrowWnd", WS_CHILD, rect1, inDoc->GetTowerMainView(), NULL, WS_EX_TOPMOST); mRgn.CreatePolygonRgn(rgnPoints, 7, ALTERNATE); CRect rect2; GetClientRect(rect2); CPoint pt; pt.x = ((rect1.right - rect1.left) - (rect2.right - rect2.left)) / 2; pt.y = ((rect1.bottom - rect1.top) - (rect2.bottom - rect2.top)) / 2; CRgn rgn; rgn.CreateRectRgn(0, 0, 1, 1); rgn.CopyRgn(&mRgn); rgn.OffsetRgn(pt.x, pt.y); SetWindowRgn(rgn, true); rgn.Detach(); SetWindowPos(NULL, inX - 20, inY - 45, 0, 0, SWP_NOSIZE | SWP_NOZORDER | SWP_NOACTIVATE); GetCurrentT2TowerDoc()->towerDoc_vf290(true); GetCurrentT2TowerDoc()->towerDoc_vf1A0(true); mCounter = 0; SetTimer(1, 50, NULL); } BEGIN_MESSAGE_MAP(T2ArrowWnd, CFrameWnd) ON_WM_ERASEBKGND() ON_WM_TIMER() ON_WM_DESTROY() END_MESSAGE_MAP() afx_msg BOOL T2ArrowWnd::OnEraseBkgnd(CDC* pDC) { int save = pDC->SaveDC(); { CRect rect; GetClientRect(rect); pDC->FillSolidRect(rect, (mCounter & 1) ? RGB(255, 0, 0) : RGB(255, 255, 0)); CBrush brush; brush.CreateStockObject(BLACK_BRUSH); pDC->FrameRgn(&mRgn, &brush, 1, 1); } pDC->RestoreDC(save); return true; } afx_msg void T2ArrowWnd::OnTimer(UINT nIDEvent) { if (nIDEvent == 1) { if (mCounter == 0) ShowWindow(SW_SHOWNA); mCounter++; if (mCounter > 30) { ShowWindow(SW_HIDE); DestroyWindow(); } else { InvalidateRect(NULL); } } } afx_msg void T2ArrowWnd::OnDestroy() { CFrameWnd::OnDestroy(); DeleteObject(mRgn); GetCurrentT2TowerDoc()->towerDoc_vf294(); GetCurrentT2TowerDoc()->towerDoc_vf1A0(false); KillTimer(1); }