私は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);
}
}
私はラジオボタンについて知っているが、この場合の選択肢は、非相互に排他的であることができます。 2つのボックスのうちの1つをチェックしないようにすることは可能ですが(ただしすぐには両方ではありません)、ラジオボタンが正しい選択ではないと思いますか?
ラジオボタンは、相互に排他的な選択肢のためにあるオプションを取ります。上記のどれも選択したくない場合は、そのオプションも指定してください。 IMHO、期待したように動作しないコンポーネントを使用するのは悪いUXです。 –
両方の状態を取得します。コード内で必要な状態を整理する。両方の状態を設定します。これはユーザーの予期しない動作につながりますが、求めたことは行います。同様のコントロール(たとえば、MS Office)を見つけて、ユーザーがこのような状態変更をどのように実装しているかを見てみましょう。 –
しないでください。チェックボックスは排他的ではありません。ラジオボタンですジョブに適切なコントロールを使用します。ユーザがチェックボックスを見ると、ユーザはそれらが独立していることを知る。ユーザーがラジオボタンを見ると、それらが排他的であることがわかります。 –