在CCombobox上继承实现了一个自己的CMyCombobox,它的对象在SetFocus时会由于其风格不同出现下列现象:当设置为CBS_DROPDOWN风格时,SetFocus引起CMyCombobox::OnSetFocus(), 其中调用了 CCombobox::OnSetFocus().
当在调用CCombobox::OnSetFocus时,会引起CMyCombobox::OnKillFocus()的调用。这是为什么呢?而当设置为CBS_DROPDOWNLIST风格时,SetFocus引起CMyCombobox::OnSetFocus(), 其中调用了 CCombobox::OnSetFocus().
但不会在引起CMyCombobox::OnKillFocus()的调用。这又是为什么呢?两种风格会有这样的差异,有哪位高手搞的懂原因啊?

解决方案 »

  1.   

    CBS_DROPDOWN类型的CComboBox可以编辑,个人认为可编辑的部分跟下拉部分在Windows内部或许当两个控件来处理了,所以相应了OnKillFocus。
    而CBS_DROPDOWNLIST类型的显示部分与下拉部分是一体的。
      

  2.   

    试了一下,应该是你说的原因,因为在SetFocus之后,GetFocus()->Parent() == objMyCombo.所以我可以在OnKillFocus中先判断再处理。但现在有一个问题是,在CBS_DROPDOWN风格下,CMyCombobox失去焦点时,不会相应CMyCombobox::OnKillFocus(),这怎么解决啊?
      

  3.   

    问题解决啦,当CMyCombobox在CBS_DROPDOWN风格下失去焦点时,其实是它的子窗体(编辑框)失去焦点,所以CMyCombobox不会收到WM_KILLFOCUS消息,但会收到子窗体(编辑框)发来的CBN_KILLFOCUS消息,所以只要响应这个消息就可以了。