CComboBox控件处于DropDown状态,此时如何知道在控件窗口外点击了鼠标左键?
我想在控件窗口外鼠标左键点击第一次时应用程序就能知道。
比如 Windows 资源管理器:
     当地址栏处于下拉状态时,总要两次鼠标点击才可以选择一个文件。我想点击一次就可搞定

解决方案 »

  1.   

    在父窗口的PreTranslateMessage里捕获wm_lbuttondown消息
      

  2.   

    我做过,
    在父窗口中响应COMBOBOX的ON_CBN_CLOSEUPS事件处理函数,加入如下代码:void CXXXXXXXDialog::OnCbnCloseupCombo1()
    {
    CPoint ptCurr;
    GetCursorPos(&ptCurr);
    ScreenToClient(&ptCurr);
    CRect rtCombo;
    GetDlgItem(IDC_COMBO1)->GetWindowRect(&rtCombo);
    rtCombo.NormalizeRect();
    if ( !rtCombo.PtInRect(ptCurr) )
    {
    CWnd* pChild = ChildWindowFromPoint(ptCurr);
    if (pChild)
    {
    MapWindowPoints(pChild, &ptCurr, 1);
    ::SendMessage(pChild->m_hWnd, WM_LBUTTONDOWN, 0, MAKELPARAM(ptCurr.x, ptCurr.y));
    }
    }
    }
      

  3.   


    CPoint ptCurr;
    GetCursorPos(&ptCurr);
    ScreenToClient(&ptCurr);

    CWnd* pChild = ChildWindowFromPoint(ptCurr);
    if (GetDlgItem(IDC_COMBO1) != pChild)
    {
    MapWindowPoints(pChild, &ptCurr, 1);
    ::SendMessage(pChild->m_hWnd, WM_LBUTTONDOWN, 0, MAKELPARAM(ptCurr.x, ptCurr.y));
    }
      

  4.   

    恩,因为列表框下拉出来的时候,鼠标的Capture被列表框捕获,所有鼠标消息都流向列表框,要么拦截列表框的鼠标消息,要么响应列表框获得鼠标消息后的动作。
      

  5.   

    以上方法都有好多问题。
    用SetWindowsHookEx(WH_MOUSE, ...);终于可以完美搞定了,还是谢谢各位