c++ - 带有单个发送消息的 ComboBox 项目选择

标签 c++ winapi

通过代码,我从另一个进程对话框中选择组合框项目

这是已经尝试过的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/

相关文章:

c++ - 限制变量范围的优缺点

c++ - n 维中最近对中的错误

winapi - PROPERTYKEY::pid 含义

winapi - 是否可以使用 IUIFramework::LoadUI 加载已编译的标记文件?

windows - 为什么调用 ProcessGroupPolicyEx 回调会导致访问冲突?

c - 未定义的 Windows 引用 _ftprintf

c++ - 在堆栈中创建对象时,即使代码覆盖率为 100%,函数覆盖率也较低

c++ - 如何在 Visual Studio 2017 中支持 Variadic 模板类型

c - 获取任务栏句柄

c++ - 避免在模板的前向声明中出现重复的 require 子句?