如何做一个像 ComboBox 和菜单下拉部分那样的控件,让控件可以在窗口的外面,而且在控件获得焦点的时候控件所属窗口仍旧是被激活的状态,标题栏是活动状态的。

解决方案 »

  1.   

    1: 该弹出窗口的父窗口是Desktop.
    2: 该窗口必须被设成TOPMOST,不然会被遮住.
    3: 该窗口必须有建立者窗口的句柄,以便于访问.
    4: 该窗口必须在MOUSEAVTIVE中,禁止该窗口获得焦点
      

  2.   

    你是想在TOOLBAR上添加下拉框?
      

  3.   

    shi de 是的话 站内消息我发个例子给你,代码挺多
      

  4.   

    Toolbar里添加一个下拉框是的,一般窗口下添加一个自定义下拉框也有,两者都有。给我代码吧shl6894(),谢谢!
      

  5.   

    我的例子是在TOOLBAR上添加下拉的,不知道对你有没有用。参考一下吧。(里边用到了一些我自己定义的类,你去掉换成你自己需要的就可以了)
    BOOL CMainFrame::CreatePropertyBar()
    {
    const int nDropHeight = 100 ;
    if(!m_wndPropBar.Create(this, WS_CHILD|WS_VISIBLE|
    CBRS_LEFT|CBRS_SIZE_DYNAMIC|CBRS_TOOLTIPS|
    CBRS_FLYBY,IDR_PROPERTYBAR)||
    !m_wndPropBar.LoadBitmap(IDR_PROPERTYBAR)||
    !m_wndPropBar.SetButtons(PropertyButtons,
    sizeof(PropertyButtons)/sizeof(UINT)))
    {
    TRACE0("Failed to create propertybar\n") ;
    return FALSE ;
    }
    // 设置 SEPARATOR 的宽度
    m_wndPropBar.SetButtonInfo(1, ID_SEPARATOR, 
    TBBS_SEPARATOR, 10) ;
    // 设置线型组合框的宽度
    m_wndPropBar.SetButtonInfo(2, IDW_LINESTYLE, 
    TBBS_SEPARATOR,150) ;
    // 设置 SEPARATOR 的宽度
    m_wndPropBar.SetButtonInfo(3, ID_SEPARATOR, 
    TBBS_SEPARATOR,10) ; // 设置线宽度组合框的宽度
    m_wndPropBar.SetButtonInfo(4, IDW_LINEWIDTH,
    TBBS_SEPARATOR,150);

    // 定义各组合框的边界矩形
    CRect rc ;
    // 绘制线型组合框
    m_wndPropBar.GetItemRect(2,&rc) ;
    rc.bottom = rc.top + nDropHeight ;
    // 创建线型组合框
    if(!m_wndPropBar.m_wndLineStyleCmb.Create(
    CBS_DROPDOWNLIST | WS_VISIBLE|WS_TABSTOP|
    WS_VSCROLL|CBS_OWNERDRAWVARIABLE,
    rc, &m_wndPropBar, IDW_LINESTYLE))
    {
    TRACE0("Failed to create linestyle combo--box!") ;
    return FALSE ;
    } // 向线型组合框添加选项
    m_wndPropBar.m_wndLineStyleCmb.AddItem(
    PS_SOLID,"实线") ;
    m_wndPropBar.m_wndLineStyleCmb.AddItem(
    PS_DASH,"虚线") ;
    m_wndPropBar.m_wndLineStyleCmb.AddItem(
    PS_DOT, "点线") ;
    m_wndPropBar.m_wndLineStyleCmb.AddItem(
    PS_DASHDOT, "点划线") ;
    m_wndPropBar.m_wndLineStyleCmb.AddItem(
    PS_DASHDOTDOT, "双点划线") ;
    m_wndPropBar.m_wndLineStyleCmb.AddItem(
    PS_NULL, "空线") ;
    m_wndPropBar.m_wndLineStyleCmb.AddItem(
    PS_INSIDEFRAME, "内框线") ;
    // 设置缺省项
    m_wndPropBar.m_wndLineStyleCmb.SetCurSel(0) ; // 绘制线宽组合框
    m_wndPropBar.GetItemRect(4,&rc) ;
    rc.bottom = rc.top + nDropHeight ;
    // 创建线宽组合框
    if(!m_wndPropBar.m_wndLineWidthCmb.Create(
    CBS_DROPDOWNLIST| WS_VISIBLE|WS_TABSTOP|
    WS_VSCROLL|CBS_OWNERDRAWVARIABLE,
    rc, &m_wndPropBar, IDW_LINEWIDTH))
    {
    TRACE0("Failed to create WIDTH combo--box!\n") ;
    return FALSE ;
    }
    //在线宽组合框添加选项
    m_wndPropBar.m_wndLineWidthCmb.AddItem(1, "宽度1") ;
    m_wndPropBar.m_wndLineWidthCmb.AddItem(2, "宽度2") ;
    m_wndPropBar.m_wndLineWidthCmb.AddItem(3, "宽度3") ;
    m_wndPropBar.m_wndLineWidthCmb.AddItem(4, "宽度4") ;
    //设置当前缺省的选项
    m_wndPropBar.m_wndLineWidthCmb.SetCurSel(0) ; return TRUE ;}