LAPTOP-SNT8I5JK\Boounion
2025-06-21 ba74624d44eb5bfaa45b259a985d2d64e1c51e22
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
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
// HmTab.h: interface for the CHmTab class.
//
//////////////////////////////////////////////////////////////////////
 
#if !defined(AFX_HMTAB_H__FBB8916A_DE77_4EA3_9C21_E51E6B06194C__INCLUDED_)
#define AFX_HMTAB_H__FBB8916A_DE77_4EA3_9C21_E51E6B06194C__INCLUDED_
 
 
#pragma comment(lib, "Msimg32.lib")            // TransparentBlt
#include <vector>
 
 
 
//====== HmTab =====================================================
 
#ifndef NOHMTAB
 
#ifdef _WIN32
 
#define BYHMTAB_CLASSA       "BYHmTab"
#define BYHMTAB_CLASSW       L"BYHmTab"
 
#ifdef UNICODE
#define  BYHMTAB_CLASS       BYHMTAB_CLASSW
#else
#define  BYHMTAB_CLASS       BYHMTAB_CLASSA
#endif
 
#else
#define BYHMTAB_CLASS        "BYHmTab"
#endif
 
 
#define BYSTAG_HMTAB         _T("ISHMTAB")
 
 
//====== WM_NOTIFY codes (NMHDR.code values) ==================================
#define BYHMTAB_FIRST                 (0U-1190U)       //
#define BYHMTAB_LAST                 (0U-1150U)
#define BYHMTAB_SEL_CHANGED              (BYHMTAB_FIRST - 1)
 
 
 
 
typedef struct tagBYHMTAB_NMHDR
{
    NMHDR        nmhdr;
    DWORD_PTR    dwData;
    DWORD_PTR    dwData1;
    DWORD_PTR    dwData2;
} BYHMTAB_NMHDR;
 
#define MHITEM_TEXT_MAX        64
 
typedef struct tagHMTABITEM
{
    int id;
    char szText[MHITEM_TEXT_MAX];
    RECT rect;
} HMTABITEM;
 
#define HMTAB_HITCODETEST            _T("HitCode")
#define HMTAB_HT_NOWHERE            0x1
#define HMTAB_HT_ITEM                0x2
#define HMTAB_HT_HIGT_ITEM            0x4
 
 
#endif
 
 
 
 
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
 
 
class CHmTab
{
public:
    CHmTab();
    virtual ~CHmTab();
 
public:
    static BOOL RegisterWndClass();
    static CHmTab* Hook(HWND hWnd);
    void Notify(int nCode, DWORD_PTR dwData, DWORD_PTR dwData1 = 0, DWORD_PTR dwData2 = 0);
    void Release();
    void SetBkgndColor(COLORREF cr);
    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 OnPaint(WPARAM wParam, LPARAM lParam);
    LRESULT OnSetCursor(WPARAM wParam, LPARAM lParam);
    LRESULT OnSize(WPARAM wParam, LPARAM lParam);
    LRESULT OnLButtonDown(WPARAM wParam, LPARAM lParam);
    LRESULT OnMouseMove(WPARAM wParam, LPARAM lParam);
 
 
public:
    void SetPaddingLeft(int value);
    void SetItemMarginLeft(int value);
    void SetTextColor(COLORREF color1, COLORREF color2);
    int AddItem(const char* pszText, BOOL bUpdate = TRUE);
    int DeleteItem(const char* pszText, BOOL bUpdate = TRUE);
    int HighTest(POINT pt, OUT HMTABITEM*& pItem, int* pnIndex);
    int GetCurSel();
    void SetCurSel(int index);
    int GetItemCount();
 
 
private:
    HWND        m_hWnd;
    COLORREF m_crBkgnd;
 
private:
    int m_nCurSel;
    std::vector< HMTABITEM > m_items;
    HMTABITEM* m_pHighItem;
    HMTABITEM* m_pPressItem;
    int m_nPaddingLeft;
    int m_nPaddingBottom;
    int m_nItemMarginLeft;
    COLORREF m_crText[2];
    HPEN m_hPenUnder[2];
    HPEN m_hPenUnderWnd;
};
 
#endif // !defined(AFX_HMTAB_H__FBB8916A_DE77_4EA3_9C21_E51E6B06194C__INCLUDED_)