日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

VS2010/MFC编程入门之二十三(常用控件:按钮控件的编程实例)

發(fā)布時間:2023/12/20 编程问答 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 VS2010/MFC编程入门之二十三(常用控件:按钮控件的编程实例) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

? 上一節(jié)VS2010/MFC編程入門教程中雞啄米講了按鈕控件Button、Radio Button和Check Box的基本用法,本節(jié)就繼續(xù)講按鈕控件的內(nèi)容,通過一個實例讓大家更清楚按鈕控件在實際的軟件開發(fā)中如何使用。

?????? 因為Button控件在前面的例子中涉及到了,比較簡單,本文就不作深入分析了,而是重點講解單選按鈕Radio Button、復(fù)選框Check Box的使用。

???????按鈕控件實例的功能

?????? 首先介紹此實例實現(xiàn)的功能。此實例用來根據(jù)網(wǎng)站類型選擇網(wǎng)站,并將選擇的網(wǎng)站的名稱顯示到編輯框中。網(wǎng)站類型有“門戶”、“論壇”和“博客”三種,為單選按鈕。網(wǎng)站有六個:雞啄米、新浪、天涯論壇、韓寒博客、網(wǎng)易和鳳凰網(wǎng)論壇,均為復(fù)選框。

?????? 當(dāng)選中某種網(wǎng)站類型即點了某個單選按鈕時,其對應(yīng)的網(wǎng)站的復(fù)選框就激活,其他則禁用,不允許選擇,且為非選中狀態(tài)。例如,如果選中了“門戶”單選按鈕,則“新浪”、“網(wǎng)易”復(fù)選框激活,允許用戶選擇,而其他復(fù)選框則禁用。

???????按鈕控件實例的實現(xiàn)

?????? 雞啄米下面為大家詳細(xì)闡述此實例的編寫步驟。

?????? 1. 創(chuàng)建一個基于對話框的MFC工程,名稱設(shè)為“Example23”。

?????? 2. 在自動生成的主對話框IDD_EXAMPLE23_DIALOG的模板中,刪除“TODO: Place dialog controls here.”靜態(tài)文本框,添加兩個Group Box,屬性Caption分別改為“網(wǎng)站類型”、“網(wǎng)站”。

?????? 3. 在Group Box“網(wǎng)站類型”中加入三個Radio Button,Caption分別設(shè)為“門戶”、“論壇”和“博客”,ID分別設(shè)為IDC_PORTAL_RADIO、IDC_FORUM_RADIO和IDC_BLOG_RADIO。

?????? 4. 在Group Box“網(wǎng)站”中加入六個Check Box,Caption分別設(shè)為“雞啄米”、“新浪”、“天涯論壇”、“韓寒博客”、“網(wǎng)易”和“鳳凰網(wǎng)論壇”,ID分別設(shè)為IDC_CHECK1、IDC_CHECK2、IDC_CHECK3、IDC_CHECK4、IDC_CHECK5和IDC_CHECK6。然后為每個復(fù)選框添加CButton類型的變量m_check1、m_check2、m_check3、m_check4、m_check5和m_check6。

?????? 5. 在兩個Group Box下面,添加一個靜態(tài)文本框和一個編輯框。靜態(tài)文本框的Caption設(shè)為“選擇的網(wǎng)站:”。編輯框的ID設(shè)為IDC_WEBSITE_SEL_EDIT,屬性Read Only改為True,使此編輯框為只讀狀態(tài),不允許用戶編輯。

?????? 6. 將“OK”按鈕的Caption修改為“確定”,“Cancel”按鈕的Caption修改為“退出”。到此,對話框模板就修改好了,如下圖:

??????? 7. 為“門戶”、“論壇”和“博客”三個單選按鈕分別添加點擊消息的消息處理函數(shù)CExample23Dlg::OnBnClickedPortalRadio()、CExample23Dlg::OnBnClickedForumRadio()和CExample23Dlg::OnBnClickedBlogRadio()。

??????? 在某個單選按鈕被點擊之后,我們可以先將六個網(wǎng)站復(fù)選框都禁用且置為非選中狀態(tài),而后將選擇的網(wǎng)站類型對應(yīng)的網(wǎng)站復(fù)選框激活。為了代碼復(fù)用,我們將置所有復(fù)選框為禁用且非選中狀態(tài)的操作寫到一個函數(shù)里,此函數(shù)為CExample23Dlg::InitAllCheckBoxStatus(),然后就可以在三個單選按鈕的消息處理函數(shù)中調(diào)用InitAllCheckBoxStatus(),實現(xiàn)復(fù)選框狀態(tài)的初始化。

?????? 三個消息處理函數(shù)及InitAllCheckBoxStatus()函數(shù)的實現(xiàn)如下:

C++代碼
  • void?CExample23Dlg::OnBnClickedPortalRadio() ??
  • { ??
  • ????//?TODO:?Add?your?control?notification?handler?code?here???
  • ????//?如果選擇了“門戶”單選按鈕,則激活復(fù)選框“新浪”和“網(wǎng)易”,其他復(fù)選框禁用并非選中???
  • ????InitAllCheckBoxStatus(); ??
  • ????m_check2.EnableWindow(TRUE); ??
  • ????m_check5.EnableWindow(TRUE); ??
  • } ??
  • ??
  • ??
  • void?CExample23Dlg::OnBnClickedForumRadio() ??
  • { ??
  • ????//?TODO:?Add?your?control?notification?handler?code?here???
  • ????//?如果選擇了“論壇”單選按鈕,則激活復(fù)選框“天涯論壇”和“鳳凰網(wǎng)論壇”,其他復(fù)選框禁用并非選中???
  • ????InitAllCheckBoxStatus(); ??
  • ????m_check3.EnableWindow(TRUE); ??
  • ????m_check6.EnableWindow(TRUE); ??
  • } ??
  • ??
  • ??
  • void?CExample23Dlg::OnBnClickedBlogRadio() ??
  • { ??
  • ????//?TODO:?Add?your?control?notification?handler?code?here???
  • ????//?如果選擇了“博客”單選按鈕,則激活復(fù)選框“雞啄米”和“韓寒博客”,其他復(fù)選框禁用并非選中???
  • ????InitAllCheckBoxStatus(); ??
  • ????m_check1.EnableWindow(TRUE); ??
  • ????m_check4.EnableWindow(TRUE); ??
  • } ??
  • ??
  • //?初始化所有復(fù)選框的狀態(tài),即全部禁用,全部非選中???
  • void?CExample23Dlg::InitAllCheckBoxStatus() ??
  • { ??
  • ????//?全部禁用???
  • ????m_check1.EnableWindow(FALSE); ??
  • ????m_check2.EnableWindow(FALSE); ??
  • ????m_check3.EnableWindow(FALSE); ??
  • ????m_check4.EnableWindow(FALSE); ??
  • ????m_check5.EnableWindow(FALSE); ??
  • ????m_check6.EnableWindow(FALSE); ??
  • ??
  • ????//?全部非選中???
  • ????m_check1.SetCheck(0); ??
  • ????m_check2.SetCheck(0); ??
  • ????m_check3.SetCheck(0); ??
  • ????m_check4.SetCheck(0); ??
  • ????m_check5.SetCheck(0); ??
  • ????m_check6.SetCheck(0); ??
  • }??
  • ?????? 8. 程序運行后,我們希望網(wǎng)站類型默認(rèn)選擇為“門戶”,則修改對話框初始化函數(shù)CExample23Dlg::OnInitDialog()為:

    C++代碼
  • BOOL?CExample23Dlg::OnInitDialog() ??
  • { ??
  • ????CDialogEx::OnInitDialog(); ??
  • ??
  • ????//?Add?"About..."?menu?item?to?system?menu.???
  • ??
  • ????//?IDM_ABOUTBOX?must?be?in?the?system?command?range.???
  • ????ASSERT((IDM_ABOUTBOX?&?0xFFF0)?==?IDM_ABOUTBOX); ??
  • ????ASSERT(IDM_ABOUTBOX?<?0xF000); ??
  • ??
  • ????CMenu*?pSysMenu?=?GetSystemMenu(FALSE); ??
  • ????if?(pSysMenu?!=?NULL) ??
  • ????{ ??
  • ????????BOOL?bNameValid; ??
  • ????????CString?strAboutMenu; ??
  • ????????bNameValid?=?strAboutMenu.LoadString(IDS_ABOUTBOX); ??
  • ????????ASSERT(bNameValid); ??
  • ????????if?(!strAboutMenu.IsEmpty()) ??
  • ????????{ ??
  • ????????????pSysMenu->AppendMenu(MF_SEPARATOR); ??
  • ????????????pSysMenu->AppendMenu(MF_STRING,?IDM_ABOUTBOX,?strAboutMenu); ??
  • ????????} ??
  • ????} ??
  • ??
  • ????//?Set?the?icon?for?this?dialog.??The?framework?does?this?automatically???
  • ????//??when?the?application's?main?window?is?not?a?dialog???
  • ????SetIcon(m_hIcon,?TRUE);?????????//?Set?big?icon???
  • ????SetIcon(m_hIcon,?FALSE);????????//?Set?small?icon???
  • ??
  • ????//?TODO:?Add?extra?initialization?here???
  • ????//?默認(rèn)選中“門戶”單選按鈕???
  • ????CheckDlgButton(IDC_PORTAL_RADIO,?1); ??
  • ????OnBnClickedPortalRadio(); ??
  • ??
  • ????return?TRUE;??//?return?TRUE??unless?you?set?the?focus?to?a?control???
  • }??
  • ?????? 9. 點擊“確定”后,將選擇的網(wǎng)站名字顯示到編輯框中,那么需要修改“確定”按鈕(原來的OK按鈕)的消息處理函數(shù)CExample23Dlg::OnBnClickedOk()如下:

    C++代碼
  • void?CExample23Dlg::OnBnClickedOk() ??
  • { ??
  • ????//?TODO:?Add?your?control?notification?handler?code?here???
  • ????CString?strWebsiteSel;?????????//?選擇的網(wǎng)站???
  • ??
  • ????//?若選中“雞啄米”則將其加入結(jié)果字符串???
  • ????if?(1?==?m_check1.GetCheck()) ??
  • ????{ ??
  • ????????strWebsiteSel?+=?_T("雞啄米?"); ??
  • ????} ??
  • ????//?若選中“新浪”則將其加入結(jié)果字符串???
  • ????if?(1?==?m_check2.GetCheck()) ??
  • ????{ ??
  • ????????strWebsiteSel?+=?_T("新浪?"); ??
  • ????} ??
  • ????//?若選中“天涯論壇”則將其加入結(jié)果字符串???
  • ????if?(1?==?m_check3.GetCheck()) ??
  • ????{ ??
  • ????????strWebsiteSel?+=?_T("天涯論壇?"); ??
  • ????} ??
  • ????//?若選中“韓寒博客”則將其加入結(jié)果字符串???
  • ????if?(1?==?m_check4.GetCheck()) ??
  • ????{ ??
  • ????????strWebsiteSel?+=?_T("韓寒博客?"); ??
  • ????} ??
  • ????//?若選中“網(wǎng)易”則將其加入結(jié)果字符串???
  • ????if?(1?==?m_check5.GetCheck()) ??
  • ????{ ??
  • ????????strWebsiteSel?+=?_T("網(wǎng)易?"); ??
  • ????} ??
  • ????//?若選中“鳳凰網(wǎng)論壇”則將其加入結(jié)果字符串???
  • ????if?(1?==?m_check6.GetCheck()) ??
  • ????{ ??
  • ????????strWebsiteSel?+=?_T("鳳凰網(wǎng)論壇?"); ??
  • ????} ??
  • ??
  • ????//?將結(jié)果字符串顯示于“選擇的網(wǎng)站”后的編輯框中???
  • ????SetDlgItemText(IDC_WEBSITE_SEL_EDIT,?strWebsiteSel); ??
  • ??
  • ????//?為了避免點“確定”后對話框退出,將OnOk注掉???
  • ????//CDialogEx::OnOK();???
  • }??
  • ?????? 10. 到此程序編寫完成。運行程序彈出結(jié)果對話框,選擇網(wǎng)站后界面如下圖:

    ?????? 按鈕控件的內(nèi)容就這些了。掌握了按鈕控件的基本用法,又動手編寫了這個實例后,相信大家對按鈕控件已經(jīng)很熟悉了。雞啄米歡迎大家繼續(xù)來學(xué)習(xí)交流。

    ?

    轉(zhuǎn)自:http://www.jizhuomi.com/software/181.html

    ?

    轉(zhuǎn)載于:https://www.cnblogs.com/gd-luojialin/p/9649974.html

    總結(jié)

    以上是生活随笔為你收集整理的VS2010/MFC编程入门之二十三(常用控件:按钮控件的编程实例)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。