我现在做这样一个效果
点击一个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的菜单之上
点击一个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的菜单之上
而且每次消失都是走到
pMenuPop->TrackPopupMenu( TPM_LEFTALIGN, pt.x, pt.y, pComWnd );
才消失的。
还有楼上提到的重写combobox,有没有具体的方案啊,我实在没有什么头绪