/**
* \file OwnerDrawButton.h
*
* \brief 自绘按钮的实现类
*
* \author
*/
#pragma once
class COwnerDrawButton
{
public:
COwnerDrawButton(void);
~COwnerDrawButton(void);
private:
COwnerDrawButton(const COwnerDrawButton &OtherOwnerDrawButton);
COwnerDrawButton &operator=(const COwnerDrawButton &OtherOwnerDrawButton);
public:
/**
* \brief 刷新控件
*/
bool InvalidataCtrl();
public:
/**
* \brief 创建按钮
* \param lpszCaption 参数,为按钮的显示文本
* \param lpszImage 参数,为按钮的位图路径
* \param rect 参数,为按钮的坐标
* \param hParentWnd 参数,为按钮的父窗口句柄
* \param nID 参数,为按钮的控件ID
* \param lpszImage 参数,为按钮控件一般状态位图路径
*/
BOOL Create(LPCSTR lpszCaption, const RECT& rect, HWND hParentWnd,\
UINT nID, LPCSTR lpszImage);
/**
* \brief 绘制按钮
* \param hDC 参数,为按钮的绘制用DC句柄
*/
void Draw(HDC hDC);
void DrawFocusRect(HDC hDC,RECT &rcWnd);
/**
* \brief 设置按钮
* \param fEnable 参数,为设置按钮是否可用
*/
void EnableButton(bool fEnable);
void OnLbuttonDown(WPARAM wParam, LPARAM lParam);
void OnLbuttonUp(WPARAM wParam, LPARAM lParam);
void OnLbuttonDBClick(WPARAM wParam, LPARAM lParam);
void OnMouseMove(WPARAM wParam, LPARAM lParam);
void OnMouseLeave(WPARAM wParam, LPARAM lParam);
private:
/**
* \brief 按钮消息回调函数
*/
static LRESULT CALLBACK ButtonProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam);
public:
enum STATE
{
STATE_UP,
STATE_DOWN,
STATE_FOCUS,
STATE_DISABLE
};
WNDPROC m_OldProc;//!按钮的默认消息回调函数
HWND m_hWnd; //!此按钮的句柄
private:
HBITMAP m_hFourStateBitmap; //!按钮的普通四状态位图
BOOL m_fRoundButton; //!当前控件类型,TRUE为按钮类型,FALSE为一般的显示位图控件
BOOL m_fTrackMouse;
int m_nButtonState;//!按钮的当前状态
HFONT m_hFont;//!控件字体
};