7

私はこれに対する答えを多くの場所で確認しましたが、彼らは私が行った方法を推奨していますが、私にはうまくいかないようですので、どんな助けも大歓迎です.

チェックボックスがあり、チェックされている場合は編集ボックスを有効にし、チェックされていない場合は無効にしたいと考えています。

次のコードは、私が作成したものです。

void CMFCApplication1Dlg::OnBnClickedCheck1()
{
    UINT nCheck = CheckBox.GetState();
    if (nCheck == BST_CHECKED)
    {
        EditBox.EnableWindow(TRUE);
    }
    else if (nCheck == BST_UNCHECKED)
    {
        EditBox.EnableWindow(FALSE);
    }
    else
    {
        EditBox.EnableWindow(TRUE);
    }

デバッグで実行すると nCheck は 520 なので、else オプションに直接進みます。

どうもありがとう

4

4 に答える 4

11

のマニュアル ページを読むとGetState、ビットマスクが返されることがわかります。

これは、比較で直接使用できないことを意味します。マスクのようにチェックする必要があります。

if ((nCheck & BST_CHECKED) != 0)
{
    // Button is checked
}
else
{
    // Button is unchecked
}

ただし、GetCheckあなたの場合はより適切かもしれません。

于 2012-08-23T12:51:06.227 に答える
10

CButton の GetState は、ダイアログ オブジェクトの現在の状態を取得します。使用したいのは、CButton の GetCheck です。

または、MSDNに示されているように、戻り値にビットごとのマスクを実行して現在のチェック状態を取得することもできますが、GetCheck はすぐそこにあるので、それを使用することもできます。

于 2012-08-23T12:50:57.787 に答える
3

MSDN フォーラムから:

CButton *m_ctlCheck = (CButton*) GetDlgItem(IDC_CHECKBOX);
int ChkBox = m_ctlCheck->GetCheck();
CString str;

if(ChkBox == BST_UNCHECKED)
  str.Format(_T("Un Checked"));
else if(ChkBox == BST_CHECKED)
  str.Format(_T("Checked"));
于 2016-12-06T11:21:36.300 に答える