【问题标题】:Changing the style of CMFCMenuButton look like a regular button on my dialog [duplicate]更改 CMFCMenuButton 的样式看起来像我的对话框上的常规按钮 [重复]
【发布时间】:2020-11-24 10:29:27
【问题描述】:

我的对话框上有一个CMFCMenuButton 控件:

    CONTROL         "Lookup",IDC_MFCMENUBUTTON_LOOKUP_PUBLISHER,
                    "MfcMenuButton",WS_TABSTOP,106,254,45,14

我这样初始化它:

m_menuLookupPublisher.LoadMenu(IDR_MENU_LOOKUP_PUBLISHER);
m_btnLookupPublisher.m_hMenu = m_menuLookupPublisher.GetSubMenu(0)->GetSafeHmenu();

效果很好:


更新

我添加了一些额外的代码(基于提供给我的答案):

m_menuLookupPublisher.LoadMenu(IDR_MENU_LOOKUP_PUBLISHER);
m_btnLookupPublisher.m_hMenu = m_menuLookupPublisher.GetSubMenu(0)->GetSafeHmenu();
m_btnLookupPublisher.m_nFlatStyle = CMFCButton::BUTTONSTYLE_SEMIFLAT;
m_btnLookupPublisher.m_bDrawFocus = FALSE;

这改善了按钮的外观和感觉,但仍不是 100% 相同。这是它现在没有焦点时的样子:

只是边框的显示方式不正确。 EnableWindowsThemeing 默认为 TRUE,所以我不确定我还需要在这里做什么。

烦人的是,在 VS IDE 中看起来还不错:

我的问题涉及菜单按钮的视觉显示。边框看起来与其他按钮不同。不用太多工作就能让它看起来一样吗?


更新

我偶然发现了这个question,它现在为我指明了正确的方向。如果我添加此代码:

m_btnLookupPublisher.ModifyStyle(BS_OWNERDRAW, 0, 0);

然后是正确绘制边框等,但使按钮的其他方面无用,因此它不是一个可行的解决方案。但剩下的答案正是我所需要的:

CMFCVisualManager::SetDefaultManager(RUNTIME_CLASS(CMFCVisualManagerWindows));

【问题讨论】:

    标签: mfc popupmenubutton


    【解决方案1】:

    您说的是 3D 外观吗?然后你需要指定“扁平”样式BUTTONSTYLE_FLAT

    https://docs.microsoft.com/en-us/cpp/mfc/reference/cmfcbutton-class?view=msvc-160#m_nflatstyle

    【讨论】:

    • 感谢您的建议。我没试过。如果我使用FLAT,那么设计的按钮没有矩形,除非它有焦点。如果我使用SEMIFLAT,最好还是不要在视觉上完全像按钮。我猜它们只是呈现方式不同。
    • @AndrewTruckle 如果您希望它们匹配,请将其他两个按钮也设为CMfcButton(没有Menu
    • 没有。我的应用程序中有很多对话框。只有两个人使用这些菜单按钮。我不会仅仅为了这个外观问题而改变它们。
    • 请查看更新后的问题。
    猜你喜欢
    • 1970-01-01
    • 2020-07-11
    • 2014-05-29
    • 2016-07-22
    • 1970-01-01
    • 2012-11-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多