我是WinAPI的初學者,並試圖修改其他人的代碼,製作了一對獨立的非獨佔複選框。如何使複選框獨佔?
我最初的嘗試是取消其他立即如果一個被檢查,但這顯然只在一個方向工作。如果選中IDC_2並嘗試檢查IDC_1,它會再次觸發第一個「if」語句並且失敗。
這是我的代碼:
static WDL_DLGRET dlgProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
if (IsDlgButtonChecked(hwndDlg, IDC_1)) {
// do something
// try to make exclusive
CheckDlgButton(hwndDlg, IDC_2, BST_UNCHECKED);
}
if (IsDlgButtonChecked(hwndDlg, IDC_2)) {
// do something
// try to make exclusive
CheckDlgButton(hwndDlg, IDC_1, BST_UNCHECKED);
}
}
我知道單選按鈕,但在這種情況下,選擇也可以是非相互排斥的。有可能沒有檢查兩個盒子(但不是同時存在),所以我認爲單選按鈕在這裏不是正確的選擇,或者?
單選按鈕是相互排斥的選項。如果你想要一個「以上都不是」的選擇,那麼也應該選擇這個選項。恕我直言,使用不符合預期行爲的組件是不好的用戶體驗。 –
獲取兩種狀態;計算出所需的狀態(在代碼中);設置兩種狀態。這將導致用戶意外的行爲,但會做你所問。嘗試找到類似的控件(例如在MS Office中),看看它們是如何實現這種狀態變化的(從用戶角度來看)。 –
不要。複選框並不意味着排他性。這是單選按鈕。爲作業使用正確的控制。當用戶看到複選框時,用戶知道他們是獨立的。當用戶看到單選按鈕時,他們知道他們是排他性的。 –