0

ボタンのチェックボックスをクリックするたびにチェックする機能があります

void CRisanjeDlg::OnBnClickedCheck1()
{
    Invalidate(1);
}

OnPaint メソッドには、次のコードがあります。

    if(m_CheckBox1.GetState() ==1 )
{
    CBrush brush;
    CRect rect;
    GetClientRect(rect);
    brush.CreateSolidBrush(RGB(255,200,255));
    rect.DeflateRect(0,0,500,0);
    dc.Rectangle(rect);
    dc.FillRect(rect, &brush);
}

OnPaint メソッドをトリガーするイベントが他にもいくつかあります。ボックスがチェックされている場合は、描画する必要があるものを描画します。

チェックボックスをクリックしても機能しません。イベントは認識されますが、Invalidate(1) が機能しないだけです...

助言がありますか?

編集:ボックスのチェックを外すと、機能は正常に動作します。問題は

if(m_CheckBox1.GetState() ==1 )

部。

EDIT2:確かに、問題は前述のifステートメントにありました。これで修正されましたが、理由はわかりません。さらなる説明をいただければ幸いです。

m_CheckBox1.GetCheck() ==1
4

2 に答える 2

1

デバッガーを使用して、OnBnClickedCheck1関数内に入っているかどうかを確認してください

于 2012-10-11T12:08:58.510 に答える
1

GetState状態の組み合わせを返します。ユーザーはボタンを押しているので、に加えてBST_PUSHEDとがあります。単一のビットをテストしただけならうまくいったでしょう:BST_FOCUSBST_CHECKED

if ((m_CheckBox1.GetState() & BST_CHECKED) == BST_CHECKED)

ゼロ以外の値は真であるため、これは単純化できます。

if (m_CheckBox1.GetState() & BST_CHECKED)
于 2012-10-11T14:36:07.613 に答える