CheckBoxRadioBox_第1頁
CheckBoxRadioBox_第2頁
CheckBoxRadioBox_第3頁
CheckBoxRadioBox_第4頁
CheckBoxRadioBox_第5頁
已閱讀5頁,還剩17頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、CheckBox上一篇搞了個button搞上癮了,接著弄弄CheckBox,RadioButton,這兩個有少許的差異。先從CheckBox開始。 1:常用用法。 2:自繪用法(1) 常用用法。常用的用法分為四種情況,第一種情況:綁定變量,我們下面看書說話。首先:創(chuàng)建個Dialog類型的工程,在界面上拖一個CheckBox第二步:右鍵點(diǎn)擊CheckBox,選擇Add Variable綁定一個bool類型變量,有人說為啥不綁定一個int,long,char類型?滾!checkbox就選中不選中兩個狀態(tài),你綁定其他的干啥子!好了,經(jīng)過上面兩大步,現(xiàn)在就可以用了,至于用法那就多了去了,介紹多了也是脫

2、褲子放屁,不過為了照顧菜鳥,我現(xiàn)在這里就脫褲子放倆,介紹兩種綁定變量情形下的簡單用法: 第一種放法:我們現(xiàn)在界面上再拖一個Button,當(dāng)點(diǎn)擊這個button的時候,如果CheckBox選中就彈出對話框顯示“尼瑪,東莞選妃!”,如果沒選中,就顯示“靠,沒選!”。注意不要忘了UpdateData(),默認(rèn)參數(shù)是true,作用是把控件的值刷新到綁定的變量。運(yùn)行一下結(jié)果如下:第二種放法:上面的情形是在其它控件的響應(yīng)函數(shù)里面去判斷CheckBox的選中狀態(tài),有些情況下我們想當(dāng)我們點(diǎn)擊CheckBox的時候就立即響應(yīng)某些操作,那我們就要為CheckBox添加事件響應(yīng)函數(shù):右鍵checkBox,選擇屬性,

3、在屬性頁下Control Event標(biāo)簽下添加Click的響應(yīng)函數(shù)在函數(shù)里面判斷,添加跟上面一樣的代碼:效果是一樣的:上面是獲取CheckBox的狀態(tài),現(xiàn)在說說設(shè)置CheckBox的狀態(tài):假設(shè)當(dāng)點(diǎn)擊button的時候,當(dāng)Check1沒有被選中的時候設(shè)置它選中,當(dāng)button1處于選中狀態(tài)的時候就取消選中。很簡單,把button1的響應(yīng)代碼換成如下就可以了:不要忘記UpdateData(false)作用是把綁定變量的值刷新到控件上,改變控件的顯示或狀態(tài)。2:好了,同志們,以上是綁定變量的用法,下面介紹不綁定變量的用法,有時候界面控件非常多,不想綁定變量,那就要用GetCheck、SetCheck

4、依舊在Button1和Check1的代碼里面添加如下代碼:獲取的代碼如下,使用GetCheck設(shè)置的代碼如下,使用SetCheck,同志們,眼睛擦亮,CheckBox的Click響應(yīng)函數(shù)里面沒有改,為啥!大腦皮層過過電,除非腦子讓驢屁股踢了才會改成159和162之間的代碼。2:第三種方式使用IsDlgButtonChecked檢測,但只能檢測,設(shè)置的話就要用到上面兩種方式綁定變量的時候用UpdateFalse或者用上面的(CButton*)GetDlgItem(IDC_CHECK1)->SetCheck代碼如下,159行:第四種方式:那就是最原始的使用SendMessage了代碼如下:(

5、2) 自繪這個可好玩了,你可以把這個東西繪制成任何形狀,你他娘的不要老想著CheckBox就必須中間有個小對勾,只要能看出兩種不同狀態(tài)的都可以當(dāng)做CheckBox我們知道CheckBox類型也是button,所以繪制也跟button差不多,下面我用兩種方式繪制。1:直接在客戶區(qū)繪制個碉堡拉風(fēng)的CheckBox。由于CheckBox也是button,所以我們就基于button繪制這個CheckBox,首先需要添加一個類MyFuckCheckBox繼承CButton,然后綁定一個MyFuckCheckBox的變量到button,別忘了在屬性頁下面把button的Owner Draw屬性設(shè)置為tru

6、e(有人說我就非要基于CheckBox,沒問題!但有一點(diǎn)區(qū)別,你在CheckBox屬性頁下面找不到Owner Draw屬性,所以需要在MyFuckCheckBox類中繼承PreSubclassWindow(右鍵這個類,選屬性,在重載標(biāo)簽下),在PreSubclassWindow里面添加ModifyStyle(0,BS_OWNERDRAW);坦誠而言,基于CheckBox的情況我沒試過,也沒必要試,因?yàn)榛贐utton畫就足夠)在MyFuckCheckBox中添加一個bool類型的變量m_checkState,用來保存checkbox的狀態(tài),我這里初始化為false,表示開始未選中。好了我們在D

7、rawItem函數(shù)里面開始畫這個CheckBox,代碼如下: 初始界面如下:右鍵MyFuckCheckBox類,選屬性,在message標(biāo)簽頁下為類添加單擊響應(yīng)事件在ObBnClicked中添加如下代碼:運(yùn)行代碼效果如下:好了,效果出來了,有些腦子實(shí)在笨的可能會問,效果是出來了,可怎么用啊,奶奶的,你難道忘記了我們?yōu)檫@個button綁定了一個變量?并且在MyFuckCheckBox類里面添加了一個bool類型的變量那你用的時候就可以如下判斷:if(m_checkbox.m_checkState)else好了,CheckBox自繪就這樣,你當(dāng)然頁可以直接在button上貼圖片,搞得更炫,但原理是

8、一樣的,Radio Button的自繪跟這個也是一樣的,就不講了,下面說一下RadioBox的常用用法就可以了涉及代碼如下:void MyFuckCheckBox:DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct)/ TODO: Add your code to draw the specified itemCDC* dc = CDC:FromHandle(lpDrawItemStruct->hDC);CBrush br;/畫底色,白色br.CreateSolidBrush(RGB(255,255,255);dc->FillRect(&l

9、pDrawItemStruct->rcItem, &br);/未選中時if(m_checkState = false)/在button一半?yún)^(qū)域畫作CheckBox類似的方框RECT rt = lpDrawItemStruct->rcItem;rt.right = rt.right - rt.right/2;br.DeleteObject();br.CreateSolidBrush(RGB(0,255,0);dc->FillRect(&rt, &br);/顯示文字dc->SetBkMode(TRANSPARENT);dc->DrawText(

10、TEXT("未選"),2, &rt, DT_SINGLELINE|DT_VCENTER|DT_CENTER);else/選中時/在button另一半?yún)^(qū)域畫作CheckBox類似的方框RECT rt = lpDrawItemStruct->rcItem;rt.left = rt.right - rt.right/2;br.DeleteObject();br.CreateSolidBrush(RGB(0,255,0);dc->FillRect(&rt, &br);/顯示文字dc->SetBkMode(TRANSPARENT);dc-&g

11、t;DrawText(TEXT("已選"),2, &rt, DT_SINGLELINE|DT_VCENTER|DT_CENTER);/畫邊框,紅色br.DeleteObject();br.CreateSolidBrush(RGB(255,0,0);dc->FrameRect(&lpDrawItemStruct->rcItem, &br);void MyFuckCheckBox:OnBnClicked()/ TODO: Add your control notification handler code herem_checkState =

12、 !m_checkState;InvalidateRect(NULL);RadioBox 我們知道Radio Button(以下簡寫為radio)是一組一組用的,單個radio沒有任何意義,所謂的一組通俗理解就是這幾個radio互斥的選中,一組內(nèi)的radio每次只能有一個處于選中狀態(tài),可能有的神人說一個Group Box框里面就是一組,比如如下第一幅圖,這是放屁,老子完全可以在這個Group Box框里面放好幾個組,比如第二幅圖,明顯就是一次選中兩個radio,說明是兩個不同的組所謂組的含義在資源里面看就是添加了WS_GROUP屬性那么怎么來確定一個組呢?在資源里面看就是在上一個含有WS_GR

13、OUP類型的控件(包括)到下面含有WS_GROUP類型控件(不包括)之間的控件是一組。有人說那我給幾個普通button分組可以不?先問問自己有意義嗎?普通button需要互斥嗎?一板磚拍死你為了便于觀察我們在界面上再放幾個radio,radio5和radio6,radio 7,radio 8看圖識字:進(jìn)入到對應(yīng)得rc資源文件看這個對話框:我們從46行往下找,在50行的radio 1的類型里面包含WS_GROUP,那說明從radio 1開始是一個組,到什么時候這個組結(jié)束呢,我們往下找發(fā)現(xiàn)第55行radio 5含有WS_GROUP,那么這個組就包含radio 1(包含)到Radio 5(不包含)之

14、間的radio 1,radio 2,radio 3,radio 4,雖然radio 1到radio 6都在同一個Group Box下,但是他們不是一個組,所以如下圖可以同時選擇。有的人說,我他媽總不能每次都跑到資源文件下面看吧,沒錯,可以通過控件屬性看,這樣就可以輕松分組,如下圖:好了,上面是組的概念,我們現(xiàn)在把沒用的去掉,開始說說怎么選中和設(shè)置選中:一:獲取選中狀態(tài)1:綁定變量法。為radio 1綁定一個int類型的變量,如下圖。我們把上面自繪的button代碼去掉,讓他響應(yīng)click消息,并且顯示哪個radio被選中,代碼如下:效果如下:我們發(fā)現(xiàn)雖然我們綁定的只是radio1,但是MFC會

15、自動為我們這個組內(nèi)的radio都綁定這個變量,并且當(dāng)選中不同radio的時候,值會從0開始指定。2:使用GetCheckedRadioButton函數(shù)這是個碉堡的函數(shù),他的使用形式如下:返回int GetCheckedRadioButton(開始ID,結(jié)束ID),返回的是選中控件的ID值。這里有個事項(xiàng)要注意,這一組內(nèi)的radio button的ID一定要連續(xù),不然沒法使用這個函數(shù);使用代碼如下:運(yùn)行效果如下:第三種方式:使用SendMessage,這他媽是萬能方式啊,誰讓MFC就是API堆起來的呢但要注意,每次SendMessage只能判斷一個radio的狀態(tài),所以要有一組Radio就有可能要發(fā)送很多次,代碼如下:效果如下:二:設(shè)置選中狀態(tài)在默認(rèn)情況下如果不設(shè)置,一組radio的狀態(tài)肯定是一個都不選中,這種用法在地球上很少見,一般都在初始化對話框的時候設(shè)置組內(nèi)的其中一個處于選中狀態(tài):設(shè)置方式1:綁定變量法。代碼如下:在對話框的OnInitDialog里面添加需要注意的是,不要忘記UpdateData(false)第二種方式:使用SetCheck 代碼如下,在這里105到109之間的代碼當(dāng)然可以不寫,因?yàn)槟J(rèn)沒有選中的按鈕,但如果在其它地方添加代碼,有

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論