2011-07-08 30 views
1

我想检测何时通过用户操作更改对话框上的任何控件。例如,当数据输入到文本框中时,会在日期时间选择器中输入日期,选中或取消选中复选框等。到目前为止,我忽略了这些通知,并简单地检索了控件的状态用户按下一些按钮,但现在我想知道发生了变化(我想启用属性表上的“应用”按钮)。我并不在乎发生了什么变化,我只想知道有些事情已经发生了变化。通过改变,我不是指改变焦点,而是用户改变控制的一些实际行动。对话框控件 - 检测更改

我使用普通的旧C++,没有MFC或任何幻想。

我该如何解决这个问题?

+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

谢谢,该代码适用于编辑框。 –