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