我现在做这样一个效果
点击一个ComBox显示他的下拉菜单,对其中某一项点击右键,弹出一个菜单。
以下是我的实现代码
BOOL CMenuTestDlg::PreTranslateMessage(MSG* pMsg) 
{
    if ( WM_RBUTTONDOWN == pMsg->message )
    {
        CComboBox* pComWnd = ( CComboBox* )GetDlgItem( IDC_COMBO1 );
        pComWnd->ShowDropDown();        CPoint pt = pMsg->pt;                CRect rt;
        pComWnd->GetWindowRect( &rt );
        
        int nCount = pComWnd->GetCount();
        int nHight = pComWnd->GetItemHeight( 0 );
        rt.top = rt.top + nHight;
        rt.bottom = rt.top + nHight * ( nCount + 1 );        if ( rt.PtInRect( pt ) )
        {
            CMenu *pMenu;            pMenu = new CMenu;
            pMenu->LoadMenu( IDR_MENU_DELETE );
            
            CMenu* pMenuPop = pMenu->GetSubMenu( 0 );
            pMenuPop->TrackPopupMenu( TPM_LEFTALIGN, pt.x, pt.y, pComWnd );
            delete pMenu;
        }    }

return CDialog::PreTranslateMessage(pMsg);
}
这样的代码,点击右键后,菜单能显示出来,但原本显示的ComBox的下拉菜单消失了,这不是我想要的效果,我想要的效果是ComBox的下拉菜单和右键弹出的菜单能同时显示并且右键弹出的菜单才Combox的菜单之上

解决方案 »

  1.   

    你右键点了一下,就相当于ComboBox接收到了Click的消息,当然下拉框就消失了。重写吧。
      

  2.   

    我刚刚试了一下,点右键不会导致下拉菜单消失
    而且每次消失都是走到
    pMenuPop->TrackPopupMenu( TPM_LEFTALIGN, pt.x, pt.y, pComWnd ); 
    才消失的。
    还有楼上提到的重写combobox,有没有具体的方案啊,我实在没有什么头绪