答案 0 :(得分:4)
标准菜单实现提供了自动添加滚动条的功能,如果条目数超过菜单的最大高度。默认情况下,弹出菜单的高度设置为0,指示系统使用屏幕高度作为菜单的最大高度。
这适用于多种情况,您无需采取任何措施来获取该行为。但是,对于多监视器设置,它确实失败,其中主显示器的高度大于显示应用程序的显示器的高度。
要解决此问题,您可以在显示时设置相应的弹出菜单的最大高度。适当的地方是CWnd::OnInitMenuPopup:
void CMainFrame::OnInitMenuPopup( CMenu* pPopupMenu, UINT nIndex, BOOL bSysMenu ) {
CFrameWnd::OnInitMenuPopup( pPopupMenu, nIndex, bSysMenu );
if ( !bSysMenu && ( nIndex == 3 ) ) { // Apply appropriate filter
MENUINFO mi = { 0 };
mi.cbSize = sizeof( mi );
mi.fMask = MIM_MAXHEIGHT;
mi.cyMax = 150; // Pick an appropriate value
pPopupMenu->SetMenuInfo( &mi );
}
}
每当要显示弹出菜单时,都会调用此回调。高度已被任意设置为150
。您可以选择您认为适合您应用的任何值(例如,所有显示器的最小高度,基于显示器高度的值,显示菜单的位置等)。
自动添加滚动条,如以下屏幕截图所示: