How to use RadioButton

單選是 Dialog 中常會看到的 Button 類型

不過到底要怎麼實作還是讓我花了快一個下午才搞懂

首先就是先從工具箱中拉出你需要的 Radio 數目

2014-10-03-01

 

接著呢要對這些 Radio 分組,因為這裡只有一組

所以只要設定 Radio1 的 Group 屬性為 True

如果有兩組就是把第二組第一個 Radio 的 Group 屬性為 True (依此類推)

2014-10-03-02

 

之後要如何 Get/ Set RadioButton 的選取狀態呢

首先就是新增成員變數,在 Group 屬性為 True 的 RadioButton 上按右鍵→加入變數

接著勾選控制項變數、選擇類別為 Value、設定變數類別及名稱

2014-10-03-03

 

就會看到在 .h 檔和 .cpp 檔中都幫你加好程式了

// .h
public:
int m_cbBuildWith;

// .cpp
CRadioDlg::CRadioDlg(CWnd* pParent /*=NULL*/)
	: CDialogEx(CRadioDlg::IDD, pParent)
	, m_cbBuildWith(0)
{
	m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}

void CRadioDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialogEx::DoDataExchange(pDX);
	DDX_Radio(pDX, IDC_RADIO1, m_cbBuildWith);
}

Constructor 後面加上的那串表示初始化時預設被選中的是哪個 RadioButton

-1:都沒有、0:第一個、1:第二個…

奇怪的是如果一開始變數型態選擇的是 BOOL 還是可以設定 2 以上的數字 0.0

 

接下來是取值與設定值的程式:

// Get RadioButton
m_dGeneralDlg.UpdateData(TRUE);
fileDlgValue->general_buildWith = m_dGeneralDlg.m_cbBuildWith;

// Set RadioButton
m_dGeneralDlg.m_cbBuildWith = fileDlgValue->general_buildWith;
m_dGeneralDlg.UpdateData(FALSE);

 

fileDlgValue->general_buildWith 是一個宣告來儲存 RadioButton 的變數

UpdateData(); 是用來更新資料和控制項狀態

當需要取得 Dialog 上之控制項儲存資料時 使用 UpdateData(TRUE) 來取得

反之 需要將變數呈現於 Dialog 之控制項時 需要用 UpdateData(FALSE)

 

在這裡讓我卡了很久,後來發現是因為我是使用 Tab Dialog 的架構

所以在 UpdateData(); 前要指定需要更新的 Dlg 是哪一個

這樣就成功設定好怎麼存取 RadioButton 狀態了(y)

 

[參考資料]

1. MFC  RadioButton用法详解

2. MFC: UpdateData()