多狀態按鈕 button vc c++ MFC CBitmapButton

本文使用vc6.0 MFC程序實現自定義的多狀態button。vc9.0(即vs2008)下,去掉stdafx.h文件中的#define _WIN32_WINNT 0x0400 也可以運行(有個warning)。

由於只是示例,並沒有注意接口,您可以自己改;自己的美工水平不行,您可以自己更改bitmap資源。

介紹了三種多狀態按鈕 :

1)三狀態按鈕 

     鼠標在button上;鼠標在button外;鼠標按下button

2)六狀態按鈕

     在1)的基礎上增加了對應的獲得焦點的三種情況

3)MFC自帶的CBitmapButton類

    有四種狀態:up,down,focus,disabled。控件風格不同,狀態個數不同,具體可看msdn。

 

代碼可到此處下載:

 http://download.csdn.net/source/986965

 

(一)三狀態按鈕

 

1)定義繼承自CButton的子類CyctBitmapButton。

2)三狀態需要三個位圖資源

    裝在和卸載位圖資源:

3)初始化button

    窗口初始化後需要調用Init()函數。布爾值變量m_fIsInit確保button只初始化一次。

4)處理鼠標響應函數(這是關鍵的)

 處理了四種鼠標消息WM_MOUSEMOVE,WM_LBUTTONDOWN,WM_LBUTTONUP,WM_MOUSELEAVE:

其中WM_MOUSELEAVE消息響應映射是手工添加的。

在頭文件中DECLARE_MESSAGE_MAP()前添加一句:

在對應的cpp文件中BEGIN_MESSAGE_MAP和END_MESSAGE_MAP之間添加一句:

WM_MOUSELEAVE消息是由函數TrackMouseEvent產生的,當鼠標離開button控件就會觸發此消息。

 

函數SetBitmap定義如下(具體的看源代碼吧):

5)如果想去掉按鈕button在獲得焦點時的虛框,重載WM_SETFOCUS消息,並且置函數體爲空即可。

 

(二)六狀態按鈕

       與(一)類似,不再敘述。

 

(三)MFC自帶的CBitmapButton類

使用很簡單,在對話框類的OnInitDialog內裝載四個位圖資源即可:

 

 

總結:多狀態按鈕主要是使用函數TrackMouseEvent函數實現的。本文只是示例,很簡陋。你也可以下載CButtonST來看看,方法基本一樣。下載區有:

http://search.download.csdn.net/search/cbuttonst

 

 

 

 

 

 

發佈了25 篇原創文章 · 獲贊 9 · 訪問量 30萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章