通过代码,我从另一个流程对话框中选择了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)的两种方法,这增加了延迟。 有没有办法选择并通知使用单个消息?
答案 0 :(得分:1)
没有。根据设计,通过代码更改选择不会触发CBN_SELCHANGE
。文档明确说明了这一点:
使用CB_SETCURSEL消息设置当前选择时,不会发送CBN_SELCHANGE通知代码。
只有用户操作会触发CBN_SELCHANGE
,因此您必须手动发送。