// 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_)
|