通过代码,我从另一个进程对话框中选择组合框项目
这是已经尝试过的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),这会增加延迟。 有什么方法可以使用一条消息来选择和通知两者吗?
最佳答案
没有。按照设计,通过代码更改选择不会触发 CBN_SELCHANGE
。文档明确指出:
The CBN_SELCHANGE notification code is not sent when the current selection is set using the CB_SETCURSEL message.
只有用户操作才会触发 CBN_SELCHANGE
,因此您必须手动发送。
关于c++ - 带有单个发送消息的 ComboBox 项目选择,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39481784/