【发布时间】:2020-12-16 08:35:01
【问题描述】:
在 Windows C API 中,我有一个下拉样式的组合框。我在对话框初始化期间在组合框的编辑控件中设置了一个文本。我希望显示未选中的文本。
我发送以下消息:
SendDlgItemMessage(hDlg, IDC_EDIT_FIND, CB_SETCURSEL,0,0);
SendDlgItemMessage(hDlg, IDC_EDIT_FIND, CB_SETEDITSEL,0,MAKELPARAM(-1,0));
但文本没有被取消选中。文档中提到了CB_SETEDITSEL:
l参数
[in] lParam 的低位字指定起始位置。如果低位词为 –1,则删除选择(如果有)。
lParam 的高位字指定结束位置。如果高位词为–1,则选择编辑控件中从起始位置到最后一个字符的所有文本。
还有:
如果消息成功,则返回值为 TRUE。如果消息发送到具有 CBS_DROPDOWNLIST 样式的组合框,则为 CB_ERR。
当我发送消息时,结果为 1 (TRUE) 但编辑控件中的文本并未取消选择
如何取消选择组合框编辑控件的文本?
【问题讨论】:
-
您是否尝试发送
CB_GETEDITSEL以查看开始/结束位置是否已更改?如果他们有,那么也许只是一个RedrawWindow()电话? -
@AdrianMole,正在处理您的建议。在
CB_SETCURSEL之后,CB_GETEDITSEL报告 0,0。CB_SETEDITSEL5,7 之后,CB_GETEDITSEL报告 5,7;但是,文本只是被选中(蓝色),按一个键会删除文本,因此它被选中。待办事项:重绘,但我对此表示怀疑。 -
@PaulOgilvie 这让我想起了a question 我前段时间问过。不完全一样,但问题非常相似。不过我还没有找到解决方案,我放弃了。也许那里的 cmets 和答案(对我不起作用)可能会有所帮助。
-
@Jabberwocky,我找到了解决方案。你也可以在你的情况下使用它。在失去焦点之前记住光标位置,然后当焦点再次设置到您的控件时,取消选择(请参阅我的解决方案)并将光标放在其旧位置。
标签: c windows winapi combobox user32