首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> VC >> 關於VC++

VC++ 6.0 核取方塊與單選鈕完整使用指南:變數綁定、訊息映射與群組管理

     編輯:關於VC++

CButton 封裝了 Windows 核取方塊 (Checkbox) 與單選鈕 (Radio Button) 兩種控件。單選鈕用於互斥選項群組,核取方塊支援多重選擇。本文系統說明對話框編輯器對齊技巧、Tab Order 群組邏輯、六種程式碼操作方式,並附完整範例表格。

對話框編輯器:控件對齊與群組建立

  1. 按 Ctrl 多選控件,最後選取者為基準 (實心調整點)。
  2. 選單 Layout → Make Same Size → Both 統一尺寸。
  3. Layout → Align → Left 左對齊。
  4. Layout → Align → Space Evenly → Down 垂直等距分佈。

單選鈕群組邏輯:Tab Order 決定一切

  • 資源編輯器中,第一個單選鈕設 Group = True,其餘 Group = False。
  • 以 Tab Order 為序,從 Group=True 開始,到下一個 Group=True (不含) 結束,形成一個互斥群組。
  • Windows 自動處理同群組單選鈕的互斥切換。
  • 關鍵:Tab Order 必須連續,否則群組邏輯錯誤。

範例資源規劃

控件類型ID標題Group 屬性
Group Box-性別-
Radio ButtonIDC_SEX1男True
Radio ButtonIDC_SEX2女False
Group Box-愛好-
CheckboxIDC_HOBBY1足球-
CheckboxIDC_HOBBY2排球-
CheckboxIDC_HOBBY3籃球-

六種程式碼操作方式

1. SetCheck / GetCheck — 直接控制狀態

// 設定:0=未選、1=選、2=不確定 (三態核取方塊) m_btnSex1.SetCheck(1); // 選中「男」 m_btnHobby1.SetCheck(1); // 選中「足球」 // 讀取 int nState = m_btnSex1.GetCheck(); // 0, 1, 或 2 BOOL bChecked = (nState == 1);

注意:程式碼 SetCheck(1) 不會自動清除同群組其他單選鈕,必須手動 SetCheck(0) 其餘項目,否則會出現多項同時選中的非法狀態。

2. GetCheckedRadioButton — 讀取群組選中項 (依 ID 範圍)

UINT nSex = GetCheckedRadioButton(IDC_SEX1, IDC_SEX2); switch (nSex) { case IDC_SEX1: /* 男 */ break; case IDC_SEX2: /* 女 */ break; case 0: /* 無選擇 */ break; }

陷阱:函式依 ID 數值大小 判斷範圍,而非 Tab Order。若 IDC_SEX1 > IDC_SEX2 會永遠回傳 0。解決:手動修改 Resource.h 確保同群組 ID 連續遞增。

3. ClassWizard 變數綁定 (DDX) — 最推薦

  • 單選鈕群組:僅對 第一個 (Group=True) 綁定 int 變數 (如 m_nSex)。值:0=第一項、1=第二項、-1=無選擇。
  • 核取方塊:各自綁定 BOOL 變數 (如 m_bHobby1)。TRUE=選中、FALSE=未選中。
// 讀取 UI → 變數 UpdateData(TRUE); if (m_nSex == 0) /* 男 */; else if (m_nSex == 1) /* 女 */; // 變數 → 更新 UI m_bHobby1 = TRUE; UpdateData(FALSE);

4. ON_CONTROL_RANGE 訊息映射 — 統一處理群組點擊

避免為每個單選鈕/核取方塊建立獨立處理函式。手動在訊息映射區加入:

BEGIN_MESSAGE_MAP(CMyDialog, CDialog) //{{AFX_MSG_MAP(CMyDialog) //}}AFX_MSG_MAP ON_CONTROL_RANGE(BN_CLICKED, IDC_SEX1, IDC_SEX2, OnSexClicked) ON_CONTROL_RANGE(BN_CLICKED, IDC_HOBBY1, IDC_HOBBY3, OnHobbyClicked) END_MESSAGE_MAP()

標頭檔宣告:afx_msg void OnSexClicked(UINT nCmdID);
實作:switch(nCmdID) { case IDC_SEX1: ... }

條件:ID 必須連續。用 View → Resource Symbols 檢查並調整。

5. IsDlgButtonChecked — 簡單判斷單一控件

if (IsDlgButtonChecked(IDC_SEX1)) // 非 0 表示選中 /* 男被選中 */;

回傳值:1=選中、0=未選中、2=不確定 (三態)。

6. 三態核取方塊 (Tristate) 應用

屬性 Tristate = True 可呈現「灰色不確定狀態」。常用於安裝精靈:父項目灰色表示「部分子功能已選」。程式碼控制:SetCheck(2) 設為不確定狀態。

最佳實務建議

  1. 優先使用 DDX 變數綁定 (方式 3),程式碼最乾淨、自動處理資料雙向同步。
  2. 需即時響應點擊執行邏輯 → ON_CONTROL_RANGE (方式 4)。
  3. 動態改變單選鈕選項 → 必須成對呼叫 SetCheck(1) / SetCheck(0) 維護互斥。
  4. 資源 ID 規劃階段即規定同群組 ID 連續遞增,避免 GetCheckedRadioButton 陷阱。

掌握上述技巧,即可靈活駕馭 VC++ 中的核取方塊與單選鈕,建構直覺易用的選項介面。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved