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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

MFC RadioButton用法详解

發布時間:2025/3/12 编程问答 44 豆豆
生活随笔 收集整理的這篇文章主要介紹了 MFC RadioButton用法详解 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
基礎介紹:

radio button通常都是成組使用的,在一組里面是互斥的。

分組的原則是:

1、首先將RadioButton控件定好Tab順序,具體方法:工具欄“格式”—>Tab鍵順序”選項選中,然后按照預定的順序依次點擊對話框上面的RadioButton按鈕,Tab鍵順序設定完成。

2、按照上面的Tab鍵順序進行分組,然后設定每組第一個RadioButtonGroup屬性為TRUE,分組完成,即從當前設置Group屬性為TRUERadioButton開始直到碰到下一個選上Group屬性的RadioButton的前一個RadioButton為一個組。

3、為單選控件定義Control變量或Value變量,每組只能定義一個,通過設定值來確定哪一個RadioButton被選中,其中-1表示該組均不被選中,0表示該組第一個RadioButton被選中,1表示第二個……)。

??

環境:Visual Studio2010

以對話框為例,工程名稱為:RadioButtonInstance。此工程中,共創建四組RadioButton,記著設定Tab鍵順序以及為每組第一個RadioButton設置Group屬性。初始化對話框為下圖:


為該工程中的RadioButton設定下面若干變量:(為單選控件定義Control變量或Value變量,每組只能定義一個)

BOOL m_Radio1;//對應于組 1 1

?????? BOOL m_Radio3; //對應于組 2 1

?????? BOOL m_Radio7; //對應于組 3 1

?????? BOOL m_Radio9; //對應于組 4 1

?????? CButton m_RBtGroup1; //對應于組 1 1????

CButton m_RBtGroup2; //對應于組 2 1

?????? CButton m_RBtGroup3; //對應于組 3 1

?????? CButton m_RBtGroup4; //對應于組 4 1

?

添加變量

方法一:利用類向導方法添加變量(略)

方法二:直接編程如下

?

RadioButtonInstanceDlg.h文件中:

代碼部分如下

class CRadioButtonInstanceDlg : public CDialogEx

{

// 構造

public:

?????? CRadioButtonInstanceDlg(CWnd* pParent = NULL); // 標準構造函數

// 對話框數據

?????? enum { IDD = IDD_RADIOBUTTONINSTANCE_DIALOG };

?????? protected:

?????? virtual void DoDataExchange(CDataExchange* pDX);?????? // DDX/DDV 支持

// 實現

protected:

?????? HICON m_hIcon;

?????? // 生成的消息映射函數

?????? virtual BOOL OnInitDialog();

?????? afx_msg void OnSysCommand(UINT nID, LPARAM lParam);

?????? afx_msg void OnPaint();

?????? afx_msg HCURSOR OnQueryDragIcon();

?????? DECLARE_MESSAGE_MAP()

public:

?????? BOOL m_Radio1;

?????? BOOL m_Radio3;

?????? BOOL m_Radio7;

?????? BOOL m_Radio9;

?????? CButton m_RBtGroup1;

?????? CButton m_RBtGroup2;

?????? CButton m_RBtGroup3;

?????? CButton m_RBtGroup4;

};

?

RadioButtonInstanceDlg.cpp文件中:

void CRadioButtonInstanceDlg::DoDataExchange(CDataExchange* pDX)

{

?????? CDialogEx::DoDataExchange(pDX);

?????? DDX_Radio(pDX, IDC_RADIO1, m_Radio1);

?????? DDX_Radio(pDX, IDC_RADIO3, m_Radio3);

?????? DDX_Radio(pDX, IDC_RADIO7, m_Radio7);

?????? DDX_Radio(pDX, IDC_RADIO9, m_Radio9);

?????? DDX_Control(pDX, IDC_RADIO1, m_RBtGroup1);

?????? DDX_Control(pDX, IDC_RADIO3, m_RBtGroup2);

?????? DDX_Control(pDX, IDC_RADIO7, m_RBtGroup3);

?????? DDX_Control(pDX, IDC_RADIO9, m_RBtGroup4);

}

?

?

問題一:如何更改RadioButton默認值???

?

方法1

在定義控件變量時,默認變量初值為-1,表示此組的任何RadioButton均不被選中,如果需要改變初始默認按鈕的設置情況,只需要在對話框的構造函數中把變量初值設為相應的變量值即可。下面附代碼和效果圖

例如 構造函數:
CRadioButtonInstanceDlg::CRadioButtonInstanceDlg(CWnd* pParent )

?????? : CDialogEx(CRadioButtonInstanceDlg::IDD, pParent)

{

?????? m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);

?????? //設置RadioButton初始默認值。如果此處不設置,那么默認值均為-1,即任何一個RadioButton均不被選中

?????? m_Radio1=-1;

?????? m_Radio3=3;

?????? m_Radio7=1;

?????? m_Radio9=0;

}

效果圖如下:

?

?



方法2

只需要在對話框的OnInitDialog()方法中添加下面代碼中綠色的部分即可。

BOOL CRadioButtonInstanceDlg::OnInitDialog()

{

?????? CDialogEx::OnInitDialog();

?????? // 將“關于...”菜單項添加到系統菜單中。

?????? // IDM_ABOUTBOX 必須在系統命令范圍內。

?????? 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);

????????????? }

?????? }

?????? // 設置此對話框的圖標。當應用程序主窗口不是對話框時,框架將自動

?????? //? 執行此操作

?????? SetIcon(m_hIcon, TRUE);????????????????? // 設置大圖標

?????? SetIcon(m_hIcon, FALSE);????????? // 設置小圖標

?????? // TODO: 在此添加額外的初始化代碼

//此種方法可以為任何一個RadioButton設置其“是否check”狀態,未指定的均為不選上狀態

?????? ((CButton *)GetDlgItem(IDC_RADIO1))->SetCheck(TRUE);//選上

?????? ((CButton *)GetDlgItem(IDC_RADIO2))->SetCheck(FALSE);// 不選上

?????? ((CButton *)GetDlgItem(IDC_RADIO4))->SetCheck(TRUE);//選上

?????? ((CButton *)GetDlgItem(IDC_RADIO8))->SetCheck(TRUE);//選上

?????? ((CButton *)GetDlgItem(IDC_RADIO9))->SetCheck(TRUE);//選上

?????? return TRUE;? // 除非將焦點設置到控件,否則返回 TRUE

}

?

效果圖如下:

?

?

方法3

單選控件每組只能定義個Control變量或Value變量。首先為每一組RadioButton關聯一個Control變量,名字分別為m_RBtGroup1m_RBtGroup2m_RBtGroup3、m_RBtGroup4。然后設定RadioButton初始狀態。

?

代碼如下:

BOOL CRadioButtonInstanceDlg::OnInitDialog()

{

?????? CDialogEx::OnInitDialog();

?????? // 將“關于...”菜單項添加到系統菜單中。

?????? // IDM_ABOUTBOX 必須在系統命令范圍內。

?????? 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);

????????????? }

?????? }

?????? // 設置此對話框的圖標。當應用程序主窗口不是對話框時,框架將自動

?????? //? 執行此操作

?????? SetIcon(m_hIcon, TRUE);????????????????? // 設置大圖標

?????? SetIcon(m_hIcon, FALSE);????????? // 設置小圖標

?????? // TODO: 在此添加額外的初始化代碼

// //此種方法只能為每一組的第一個RadioButton設置其“是否check”狀態

??? m_RBtGroup1.SetCheck(FALSE);

??? m_RBtGroup2.SetCheck(TRUE);

??? m_RBtGroup3.SetCheck(TRUE);

??? m_RBtGroup4.SetCheck(TRUE);

?????? return TRUE;? // 除非將焦點設置到控件,否則返回 TRUE

}

?

效果圖如下:



?

問題二:如何獲取RadioButton當前狀態???

?

獲取RadioButton是否選中的狀態方法如下:

?

方法一:可以使用GetCheck()獲取狀態。

例如:

?

((CButton *)GetDlgItem(IDC_RADIO2))->GetCheck();//返回1表示選上,0表示沒選上

?

方法二:獲取狀態很簡單,UpdateData(TRUE)后判斷m_nRadio1的值即可。

例如:

UpdateData(TRUE);

CString m_R1;

m_R1.Format(_T("the value of m_Radio1 is %d"),m_Radio1);

AfxMessageBox(m_R1);

?

可以根據需要為RadioButton添加鼠標單擊事件

?

問題三:如何為RadioButton添加單擊消息函數???

方法一:雙擊RadioButton按鈕,進入消息函數,然后添加相應的代碼。

方法二:用ClassWizard生成各單選按鈕的單擊消息函數,然后添加相應的代碼。

例如:

void CRadioButtonInstanceDlg::OnBnClickedRadio1()

{

?????? // TODO: 在此添加控件通知處理程序代碼

?????? m_Radio1=0; //選中此組的第一個RadioButton

?????? CString m_R1;

?????? m_R1.Format(_T("the value of m_Radio1 is %d"),m_Radio1);

?????? AfxMessageBox(m_R1);

}

void CRadioButtonInstanceDlg::OnBnClickedRadio2()

{

?????? // TODO: 在此添加控件通知處理程序代碼

?????? m_Radio1=1;//選中此組的第二個RadioButton

?????? UpdateData(FALSE);

}

void CRadioButtonInstanceDlg::OnBnClickedRadio3()

{

?????? // TODO: 在此添加控件通知處理程序代碼

?????? m_Radio3=0;//選中此組的第一個RadioButton

?????? UpdateData(FALSE);

}

void CRadioButtonInstanceDlg::OnBnClickedRadio4()

{

?????? // TODO: 在此添加控件通知處理程序代碼

?????? m_Radio3=1;//選中此組的第二個RadioButton

?????? UpdateData(FALSE);

}

void CRadioButtonInstanceDlg::OnBnClickedRadio5()

{

?????? // TODO: 在此添加控件通知處理程序代碼

?????? m_Radio3=2;//選中此組的第三個RadioButton

?????? UpdateData(FALSE);

}

void CRadioButtonInstanceDlg::OnBnClickedRadio6()

{

?????? // TODO: 在此添加控件通知處理程序代碼

?????? m_Radio3=3;//選中此組的第四個RadioButton

?????? UpdateData(FALSE);

}

void CRadioButtonInstanceDlg::OnBnClickedRadio7()

{

?????? // TODO: 在此添加控件通知處理程序代碼

?????? m_Radio7=0;//選中此組的第一個RadioButton

?????? UpdateData(FALSE);

}

void CRadioButtonInstanceDlg::OnBnClickedRadio8()

{

?????? // TODO: 在此添加控件通知處理程序代碼

?????? m_Radio7=1;//選中此組的第二個RadioButton

?????? UpdateData(FALSE);

}

void CRadioButtonInstanceDlg::OnBnClickedRadio9()

{

?????? // TODO: 在此添加控件通知處理程序代碼

?????? m_Radio9=0;//選中此組的第一個RadioButton

?????? UpdateData(FALSE);

}

void CRadioButtonInstanceDlg::OnBnClickedRadio10()

{

?????? // TODO: 在此添加控件通知處理程序代碼

?????? m_Radio9=1;//選中此組的第二個RadioButton

?????? UpdateData(FALSE);

}

總結

以上是生活随笔為你收集整理的MFC RadioButton用法详解的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。