请问如何 获取选中 ComboBox 编辑框的消息,ON_CBN_SETFOCUS 在点中 编辑框 或者 下拉框的时候都会响应,
但是我需要分别响应,请教一下如何进行处理? 

解决方案 »

  1.   

    “在点中编辑框或者下拉框的时候都会响应”
    只有能输入的控件才有focus编辑框可以输入所以有focus,下拉框时编辑框先得到focus,所以试试CBN_DROPDOWN
      

  2.   


    只是 CBN_SETFOCUS 响应在 CBN_DROPDOWN 之前, 这样我还是无法对编辑框单独响应。。
      

  3.   

    CBN_SETFOCUS : Indicates the combo box is receiving the input focus.
    CBN_DROPDOWN : Indicates the list box of a combo box is dropping down.
      

  4.   


    同上,假如点下拉按钮,CBN_SETFOCUS 在 CBN_DROPDOWN 之前就会响应
      

  5.   

    在setfocus中试试.使用BOOL GetDroppedState( ) const;可以查到
      

  6.   

    当setfocus时向窗口POST一个自定义消息,在自定义消息响应函数中判断是否已下拉,没有下拉就是编辑框输入状态,下拉了就是列表选择状态。一定要用PostMessage,这样能保证即使点击了下拉按钮,dropdown消息也会在自定义消息之前发生。
    如果是编辑框获得焦点,消息顺序是:setfocus custom
    如果是下拉按钮被点击,消息顺序是:setfocus dropdown custom
      

  7.   


    没成功。。 获得焦点在下拉之前,所以在setfocus的时候还没有下拉消息
      

  8.   


    感谢大拿关注! 但是照做的顺序如下: 
    当文本框获得焦点,消息响应顺序是:setfocus custom
    当下拉按钮被点击,消息响应顺序是:setfocus custom dropdown 看起来setfocus响应完了才有dropdown 发出。
    难道这都要用定时这种丑陋的方法来做??。
      

  9.   

    这种现象只能说明一个问题,dropdown消息也是被POST出来的(按照常理通常会用SEND),但并不是没有其它办法。还是POST自定义消息,在自定义消息响应函数里先调用
    PeekMessage(&msg, hwndParent, CBN_DROPDOWN, CBN_DROPDOWN, PM_NOREMOVE)
    检测消息队列里是否存在dropdown消息,不使用GetState函数判断。但这种方法也不能百分百保证正确,可能POST的是另一个消息,在这个消息里SEND了dropdown。
    实在不行,就直接在SetFocus里判断鼠标位置吧。
      

  10.   

    感谢前辈,PeekMessage似也未检索到,
    虽然有点猥琐,还是按鼠标位置简便。。
    感谢各位关注!