如何管理高级菜单(语言列表)?

时间:2016-01-31 15:21:06

标签: visual-c++ menu mfc

我的应用程序支持30多种语言:

enter image description here

管理屏幕菜单太高的情况的正确方法是什么?我将慢慢添加额外的语言,我不知道如何迎合它。

1 个答案:

答案 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。您可以选择您认为适合您应用的任何值(例如,所有显示器的最小高度,基于显示器高度的值,显示菜单的位置等)。

自动添加滚动条,如以下屏幕截图所示:

Menu with scrollbars