开发学院软件开发VC 控制CComboBox中ListBox的DropDown & Back 阅读

控制CComboBox中ListBox的DropDown & Back

 2009-10-06 20:29:50 来源:WEB开发网 闂傚倸鍊风欢姘缚瑜嶈灋闁圭虎鍠栫粻顖炴煥閻曞倹瀚�闂傚倸鍊风粈渚€骞夐敓鐘插瀭闁汇垹鐏氬畷鏌ユ煙閹殿喖顣奸柛搴$У閵囧嫰骞掗幋婵冨亾閻㈢ǹ纾婚柟鐐灱濡插牊绻涢崱妤冃℃繛宀婁簽缁辨捇宕掑鎵佹瀸闂佺懓鍤栭幏锟�濠电姷鏁告慨顓㈠箯閸愵喖宸濇い鎾寸箘閹规洟姊绘笟鈧ḿ褍煤閵堝悿娲Ω閳轰胶鍔﹀銈嗗笂閼冲爼鍩婇弴銏$厪闁搞儮鏅涙禒褏绱掓潏鈺佷槐闁轰焦鎹囬弫鎾绘晸閿燂拷闂傚倸鍊风欢姘缚瑜嶈灋闁圭虎鍠栫粻顖炴煥閻曞倹瀚�  闂傚倸鍊烽懗鑸电仚缂備胶绮〃鍛村煝瀹ュ鍗抽柕蹇曞У閻庮剟姊虹紒妯哄妞ゆ劗鍘ч埥澶娢熼柨瀣偓濠氭⒑瑜版帒浜伴柛鎾寸☉閳绘柨顫濋懜纰樻嫼闂佸憡绋戦オ鏉戔枔閺冣偓缁绘稓浠﹂崒姘瀳闂佸磭绮幑鍥嵁鐎n亖鏀介柟閭﹀墯椤斿倹淇婇悙顏勨偓鏍ь潖婵犳艾鍌ㄧ憸蹇涘箟閹绢喗鏅搁柨鐕傛嫹
核心提示:问题背景这是UE的一个要求,是在CComboBox下拉出ListBox的时候,控制CComboBox中ListBox的DropDown & Back,弹出一个选择窗口,然后选中一项,作如下处理1.在消息响应函数结束的地方调用Combobox.PostMessage( WM_KILLFOCUS),注意是PostM

问题背景

这是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)

Tags:控制 CComboBox ListBox

编辑录入:爽爽 [复制链接] [打 印]
[]
  • 好
  • 好的评价 如果觉得好,就请您
      0%(0)
  • 差
  • 差的评价 如果觉得差,就请您
      0%(0)
赞助商链接