LAPTOP-SNT8I5JK\Boounion
2025-09-05 a7df0e1d5521248302e5437a1cf7b14c29b3cbaa
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
#pragma once
#include <functional>
 
 
#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;
};