控制CComboBox中ListBox的DropDown及Back

问题背景

这是UE的一个要求,是在CComboBox下拉出ListBox的时候,弹出一个选择窗口,然后选中一项,显示在CComboBox的Edit中

同事的做法是在ComboBox的父窗口捕捉ComboBox的CBN_DROPDOWN通知消息,在消息响应函数中弹出选择窗口,然后为ComboBox设置Strings和选中项。但是不好的现象是,因为是在处理下拉的消息,故此函数结束的时候,下拉ListBox没有收回。

开始的做法

开始想当然的在通知消息响应函数结束的地方调用

Combobox.SendMessage( CB_SHOWDROPDOWN, (WPARAM)FALSE, 0)

来将下拉框收回,但是失败,于是又尝试了

Combobox.SendMessage( WM_KILLFOCUS)和

Combobox.SendMessage( WM_KEYDOWN, VK_ESCAPE, 0)

全部失败。

有些进步了

经过上面的失败,写了一个简单的对话框程序来测试CComboBox,发现其ListBox不是在CBN_DROPDOWN的通知消息响应函数之中/之前下拉出来的,我们准备下拉ListBox的时候就已经发出了这个通知消息,然后通知消息处理了之后才真正下拉出来。故此我们在通知消息响应函数中做的收回ListBox的函数实际上都被过早的调用了,没有起作用。

于是在测试程序中,作如下处理

1. 在消息响应函数结束的地方调用

Combobox.PostMessage( WM_KILLFOCUS),注意是PostMessage

2. 在KillFocus的响应函数中调用

Combobox.SendMessage( CB_SHOWDROPDOWN, (WPARAM)FALSE, 0)

测试项目成功通过

但是回到原来的项目中还是不行,发现原来是弹出选择窗口时就已经发出了KillFocus消息

最终解决方案

很简单,在CBN_DROPDOWN通知消息的响应函数最后加入

Combobox.PostMessage( WM_KEYDOWN, VK_ESCAPE, 0)

时间: 2024-08-03 21:57:10

控制CComboBox中ListBox的DropDown及Back的相关文章

控制CComboBox中ListBox的DropDown & Back

问题背景 这是UE的一个要求,是在CComboBox下拉出ListBox的时候,弹出一个选择窗口,然后选中一项,显示在CComboBox的Edit中 同事的做法是在ComboBox的父窗口捕捉ComboBox的CBN_DROPDOWN通知消息,在消息响应函数中弹出选择窗口,然后为ComboBox设置Strings和选中项.但是不好的现象是,因为是在处理下拉的消息,故此函数结束的时候,下拉ListBox没有收回. 开始的做法 开始想当然的在通知消息响应函数结束的地方调用 Combobox.Send

pymongo实现控制mongodb中数字字段做加法的方法

 这篇文章主要介绍了pymongo实现控制mongodb中数字字段做加法的方法,涉及Python使用pymongo模块操作mongodb数据库字段的技巧,具有一定参考借鉴价值,需要的朋友可以参考下     本文实例讲述了pymongo实现控制mongodb中数字字段做加法的方法.分享给大家供大家参考.具体分析如下: 这个非常实用,比如我们需要给文章做访问统计,可以设置一个数字字段:hit,然后每次点击后给改字段增加1即可 ? 1 2 3 4 5 6 7 8 9 import pymongo #导

android程序怎样控制手机中通知中心的开关?

问题描述 android程序怎样控制手机中通知中心的开关? 我要通过app设置里的推送开关来控制手机通知中心app是否接收通知,代码怎么写? 解决方案 这里的通知中心的管理应该是系统设置里面的吧?**_如果是,那就系统的行为,APP无法控制_**.比如某款APP产生了通知,你可以在这里禁止它弹出通知消息. 这里的只是权限的管理,系统允不允许你产生通知的控制中心而已.如果只是简单的要产生使用通知栏产生一条消息,你可以参考如下代码(该代码的功能是点击通知栏后跳转某个Activity,里面一些参数根据

asp.net中根据本机的屏幕分辨率来控制页面中gridview控件的PageSize的值

问题描述 asp.net中根据本机的屏幕分辨率来控制页面中gridview控件的PageSize的值 asp.net中根据本机的屏幕分辨率来控制页面中gridview控件中的PageSize的值,分辨率不同,PageSize的值不同 解决方案 http://zhidao.baidu.com/link?url=7_maszHk6yvjio7PD-aZQPwdpmMY6dN76qgTiEWp8cgGd4G9g_rgiqrdrxiaaKmdSQIG0C7SFx47uKVG5sN9Wa

Winform中ListBox的每一行插入一个进度条

问题描述 Winform中ListBox的每一行插入一个进度条怎么实现现在要是插入的话只能插入字符串显示,如果插入进度条就不显示任何内容了,怎么才能实现我想要的效果呢? 解决方案 解决方案二:listBox不一定有这功能吧,尝试用其它控件吧解决方案三:privatevoidForm1_Load(objectsender,EventArgse){ProgressBarprogressBar=newProgressBar();progressBar.Width=listBox1.Width;this

vc++编程问题-关于VC中ListBox问题,需要帮助

问题描述 关于VC中ListBox问题,需要帮助 我在文件中读取了一些字符串到ListBox中,如:A,B,C,现在我在此读取另一个文件的内容,如果文件中存在A,B,C了就不输出到ListBox中了!!!!有什么方法直接调用么!!! 解决方案 写一个函数BOOL Insert(CString inputCListBox *plb){int i;i=plb->FindString(0input);//检查一下这个返回值,然后就知道有没有了if(i>=0){plb->InsertString

修改按钮-Android中adapter数据传递出去与控制activity中按钮状态

问题描述 Android中adapter数据传递出去与控制activity中按钮状态 1C 求大神告知,我在adapter中获得了数据,是一个List 现在我在包适配器的这个activity中要用这个List如何将数据传递到activity中去呢?或者说我在activity中如何调用这个数据呢?还有一个问题,我在adapter中 viewHolder.imageIsCheck.setTag(position); convertView.setOnClickListener(new Content

wpf listbox button-wpf中listbox中添加button的问题

问题描述 wpf中listbox中添加button的问题 前台代码: 后台代码:class UserItem { public UserItem(int Id string Name bool IsActived) { this.Id = Id; this.Name = Name; this.IsActived = IsActived; } public int Id { get; set; } public string Name { get; set; } public bool IsAct

怎么控制GridView中某个字段字符串长度限制在20个全角字符内

问题描述 怎么控制GridView中某个字段字符串长度限制在20个全角字符内,超过就使用省略号,谢谢 解决方案 解决方案二:///<summary>///截断字符串,长出部分用...代替///</summary>///<paramname="in_str"></param>///<paramname="short_len"></param>///<returns></retur