使用单个sendmessage选择ComboBox项目

时间:2016-09-14 02:52:32

标签: c++ winapi

通过代码,我从另一个流程对话框中选择了comboxbox项目

这是尝试过的2路线

// selecting using item text
void setComboBox(HWND hDlg, const char* value, int ctrlId) {
    SendDlgItemMessageA(hDlg, ctrlId, CB_SELECTSTRING, -1, (LPARAM) value);
    SendMessageA(hDlg, WM_COMMAND, MAKEWPARAM(ctrlId,CBN_SELCHANGE),
            (LPARAM) GetDlgItem(hDlg, ctrlId));

}

 // selecting using item index
void setComboBox(HWND hDlg, int i, int ctrlId) {
    SendDlgItemMessageA(hDlg, ctrlId, CB_SETCURSEL, i, 0);
    SendMessageA(hDlg, WM_COMMAND, MAKEWPARAM(ctrlId,CBN_SELCHANGE),
            (LPARAM) GetDlgItem(hDlg, ctrlId));
}

所以我看到的是我需要发送第二个消息(WM_COMMAND)的两种方法,这增加了延迟。  有没有办法选择并通知使用单个消息?

1 个答案:

答案 0 :(得分:1)

没有。根据设计,通过代码更改选择不会触发CBN_SELCHANGE。文档明确说明了这一点:

  

使用CB_SETCURSEL消息设置当前选择时,不会发送CBN_SELCHANGE通知代码。

只有用户操作会触发CBN_SELCHANGE,因此您必须手动发送。