#pragma once #include #ifndef MAPPOSWND_TAG #ifdef _WIN32 #define MAPPOSWND_CLASSA "MapPosWnd" #define MAPPOSWND_CLASSW L"MapPosWnd" #ifdef UNICODE #define MAPPOSWND_CLASS MAPPOSWND_CLASSW #else #define MAPPOSWND_CLASS MAPPOSWND_CLASSA #endif #else #define MAPPOSWND_CLASS "MapPosWnd" #endif #define MAPPOSWND_TAG _T("MAPPOSWND_TAG") #define MAPPOSWND_FIRST (0U-5850U) #define MAPPOSWND_LAST (0U-2810U) #define MAPPOSWND_POSCHANGED (MAPPOSWND_FIRST - 1) typedef struct tagMAPPOSWND_NMHDR { NMHDR nmhdr; DWORD dwData; DWORD dwData1; DWORD dwData2; } MAPPOSWND_NMHDR; #endif class CMapPosWnd { public: CMapPosWnd(); ~CMapPosWnd(); public: static BOOL RegisterWndClass(); static CMapPosWnd * FromHandle(HWND hWnd); void SetFrameColor(COLORREF color); void SetBkgndColor(COLORREF color); void SetWndMaxSize(int nMaxSize); void SetStageSize(int cx, int cy, BOOL bInvalidata); void SetViewPort(LPRECT lpRect, BOOL bInvalidata); void GetViewPortRect(LPRECT lprcClient, LPRECT lprcDest); private: void Init(); void Notify(int nCode, int dwData, int dwData1 = 0, int dwData2 = 0); void Release(); int HighTest(POINT pt); static CMapPosWnd* Hook(HWND hWnd); static LRESULT CALLBACK WindowProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam); static LRESULT OnNcCreate(HWND hWnd, WPARAM wParam, LPARAM lParam); LRESULT OnDestroy(WPARAM wParam, LPARAM lParam); LRESULT OnTimer(WPARAM wParam, LPARAM lParam); LRESULT OnNcPaint(WPARAM wParam, LPARAM lParam); LRESULT OnPaint(WPARAM wParam, LPARAM lParam); LRESULT OnMouseMove(WPARAM wParam, LPARAM lParam); LRESULT OnLButtonDown(WPARAM wParam, LPARAM lParam); LRESULT OnLButtonDblclk(WPARAM wParam, LPARAM lParam); LRESULT OnMouseWheel(WPARAM wParam, LPARAM lParam); LRESULT OnKeyDown(WPARAM wParam, LPARAM lParam); LRESULT OnSize(WPARAM wParam, LPARAM lParam); private: HWND m_hWnd; COLORREF m_crBkgnd; COLORREF m_crFrame; COLORREF m_crViewPort; private: int m_nWndMaxSize; int m_nStageCx; int m_nStageCy; RECT m_rcViewPort; };