一、 本文介紹一個CButton的派生類CLinkButton,用此派生類制作的按鈕具有以下特點:
1、按鈕的外觀類似靜態(tài)控件類CStatic 產(chǎn)生的對象。
2、當鼠標的光標移到按鈕上,但并未按下時,光標改變形狀,字體改變形狀;按鈕類似應(yīng)用在工具條和菜單上的扁平鈕效果
二、下面具體描述這種按鈕的實現(xiàn)方法和步驟:
1. 在VC6的IDE環(huán)境中,生成一個基于對話框的PROJECT。
2. 將對話框資源中按鈕的屬性頁打開,在“Style”標簽頁中選取按鈕的“Owner Draw”(自繪)屬性。
3. 將光標引入到應(yīng)用程序的資源中。
4. 利用CLASSWIZARD,用CButton為基類,派生一個新類:CLinkButton。
5. 在派生類中重載基類CButton的虛函數(shù):
virtual void DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct)
之所以要重載這個函數(shù)是因為選擇了按鈕的 “Owner Draw”屬性后,當按鈕的可視行為發(fā)生變化時,應(yīng)用程序的框架要調(diào)用這個函數(shù)來重新繪制按鈕。
6. 定制以下的消息處理:
afx_msg void OnMouseMove(UINT nFlags, CPoint point);
afx_msg BOOL OnSetCursor(CWnd* pWnd, UINT nHitTest, UINT message);
afx_msg void OnTimer(UINT nIDEvent);
afx_msg void OnLButtonUp(UINT nFlags, CPoint point);
afx_msg void OnLButtonDown(UINT nFlags, CPoint point);
afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct);
afx_msg BOOL OnEraseBkgnd(CDC* pDC);
7. 聲明類成員變量定義:
//定義字體變量
CFont fUnderline;
//定義光標變量
HCURSOR hHand;
//決定按鈕是否按下
bool bLBtnDown;
//決定鼠標是否在按鈕上
bool bHighlight;
1、按鈕的外觀類似靜態(tài)控件類CStatic 產(chǎn)生的對象。
2、當鼠標的光標移到按鈕上,但并未按下時,光標改變形狀,字體改變形狀;按鈕類似應(yīng)用在工具條和菜單上的扁平鈕效果
二、下面具體描述這種按鈕的實現(xiàn)方法和步驟:
1. 在VC6的IDE環(huán)境中,生成一個基于對話框的PROJECT。
2. 將對話框資源中按鈕的屬性頁打開,在“Style”標簽頁中選取按鈕的“Owner Draw”(自繪)屬性。
3. 將光標引入到應(yīng)用程序的資源中。
4. 利用CLASSWIZARD,用CButton為基類,派生一個新類:CLinkButton。
5. 在派生類中重載基類CButton的虛函數(shù):
virtual void DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct)
之所以要重載這個函數(shù)是因為選擇了按鈕的 “Owner Draw”屬性后,當按鈕的可視行為發(fā)生變化時,應(yīng)用程序的框架要調(diào)用這個函數(shù)來重新繪制按鈕。
6. 定制以下的消息處理:
afx_msg void OnMouseMove(UINT nFlags, CPoint point);
afx_msg BOOL OnSetCursor(CWnd* pWnd, UINT nHitTest, UINT message);
afx_msg void OnTimer(UINT nIDEvent);
afx_msg void OnLButtonUp(UINT nFlags, CPoint point);
afx_msg void OnLButtonDown(UINT nFlags, CPoint point);
afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct);
afx_msg BOOL OnEraseBkgnd(CDC* pDC);
7. 聲明類成員變量定義:
//定義字體變量
CFont fUnderline;
//定義光標變量
HCURSOR hHand;
//決定按鈕是否按下
bool bLBtnDown;
//決定鼠標是否在按鈕上
bool bHighlight;