控制CComboBox中ListBox的DropDown & Back

眉山老农

眉山老农

2016-02-19 17:41

最近很多朋友喜欢上设计,但是大家却不知道如何去做,别担心有图老师给你解答,史上最全最棒的详细解说让你一看就懂。

  问题背景

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

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

  开始的做法

(本文来源于图老师网站,更多请访问http://m.tulaoshi.com/bianchengyuyan/)

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

  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消息

  最终解决方案

(本文来源于图老师网站,更多请访问http://m.tulaoshi.com/bianchengyuyan/)

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

  Combobox.PostMessage( WM_KEYDOWN, VK_ESCAPE, 0)

展开更多 50%)
分享

猜你喜欢

控制CComboBox中ListBox的DropDown & Back

编程语言 网络编程
控制CComboBox中ListBox的DropDown & Back

jquery控制listbox中项的移动并排序

Web开发
jquery控制listbox中项的移动并排序

s8lol主宰符文怎么配

英雄联盟 网络游戏
s8lol主宰符文怎么配

WinForm中的ListBox组件编程

编程语言 网络编程
WinForm中的ListBox组件编程

Vc6中实现CComboBox的自动完成功能

编程语言 网络编程
Vc6中实现CComboBox的自动完成功能

lol偷钱流符文搭配推荐

英雄联盟 网络游戏
lol偷钱流符文搭配推荐

AJAX应用中浏览器的BACK后退按钮问题

PHP
AJAX应用中浏览器的BACK后退按钮问题

ListBox编程两例

编程语言 网络编程
ListBox编程两例

lolAD刺客新符文搭配推荐

英雄联盟
lolAD刺客新符文搭配推荐

第八节--访问方式

第八节--访问方式

wk里有没有类似c语言里的break的命令

wk里有没有类似c语言里的break的命令
下拉加载更多内容 ↓