2011-07-08 8 views
1

ユーザーアクションによってダイアログボックスのコントロールが変更されたときに検出したい。たとえば、データがテキストボックスに入力されると、日時ピッカーに日付が入力され、チェックボックスがチェックされたりチェックされたりしません。これまでは、このような通知を無視して、ユーザーはいくつかのボタンを押すが、変更が行われたことを知りたい(プロパティーシートの[適用]ボタンを有効にしたい)。私は本当に何が変わったのか気にしない、私が知りたいのは、何かが変わったということだけです。変更によって、私はフォーカスの変更を意味するのではなく、ユーザーがコントロールを変更するための実際のアクションを意味します。ダイアログボックスのコントロール - 変更の検出

私はプレーンな古いC++を使用しています。

どうすればよいですか?

+0

MFCでない場合は、GUI用のWin32 APIを使用していますか? – Jaywalker

+0

@ jaywalker:はい、Win32 APIです。 –

答えて

1

WM_COMMANDの通知コードBN_CLICKEDでチェックボックスがオンになっているかどうかをテストすることができます。

switch(uMsg) { 
    ... 
    case WM_COMMAND: { 
    switch(HIWORD(wParam)) { 
    case BN_CLICKED: { 
     if(Button_GetCheck(lParam) == BST_CHECKED) { 
     ... 
     } 

     break; 
    } 
    default: 
     return false; 
    } 
    break; 
    } 
    default: 
    return false; 
} 

return true; 

これは、DialogProcの設定方法の例です。 lParamまたはLOWORD(wParam)をオンにして、どのボタンを識別できるかを指定できます。

+0

私はコントロールの各タイプに固有の何かをする必要がありますか?テキストボックスが変更されたことをどのように検出するか考えていますか? –

+0

編集コントロールのEN_CHANGEを確認できます。あなたがクリックされた/編集されたボタンやテキストボックスを気にしない場合は、if()部分を取り除くだけです。さまざまなタイプのコントロールは、変更のための異なる通知コードを持つ傾向があるので、WndProcのいずれかのものを待つだけです。 –

+0

これは編集ボックスで機能します。 –

関連する問題