在MFC中如何在拆分按钮控件的BCN_DROPDOWN事件上显示列表框

Posted

技术标签:

【中文标题】在MFC中如何在拆分按钮控件的BCN_DROPDOWN事件上显示列表框【英文标题】:In MFC how to display list box on the BCN_DROPDOWN event of split button control 【发布时间】:2018-10-31 12:38:43 【问题描述】:

我正在使用 VS2008。

我有基于 MFC 对话框的应用程序,带有拆分按钮控件。

我想在拆分按钮控件的 BCN_DROPDOWN 事件上显示一个列表框。不知道怎么实现?

【问题讨论】:

要么在你的按钮控件处理程序中创建一个列表框控件,要么显示列表框,如果它已经存在的话。你有什么困难? 再想一想,您真正想解决什么问题,您提出的解决方案是重新实现拆分按钮功能? 【参考方案1】:

参考CSplitButton类的文档:https://msdn.microsoft.com/en-us/library/bb514109.aspx

如果您想更改默认行为,请使用覆盖:

BEGIN_MESSAGE_MAP(CMySplitButton,
    CSplitButton)  
    ON_NOTIFY_REFLECT(BCN_DROPDOWN, &CMySplitButton::OnDropDown)  
END_MESSAGE_MAP()  

(...)

afx_msg void OnDropDown(NMHDR* pNMHDR, LRESULT* pResult);

您可以在此功能中显示您的列表框或任何您喜欢的内容。

如果您引用文档中显示的实际子菜单 (3) 的列表框,则添加一个菜单:https://msdn.microsoft.com/en-us/library/4b6tafew.aspx 并将该菜单的资源 ID 设置为 SetDropDownMenu() 函数

void SetDropDownMenu(
    UINT nMenuId,   
    UINT nSubMenuId); 

祝你好运:)

【讨论】:

【参考方案2】:

    您必须将菜单添加到资源中。 例如:IDR_MENU_BUTTON_ANY

    为子菜单声明一些资源符号。它将更改 *.rc 和 resource.h。

您的资源将如下所示:

IDR_MENU_BUTTON_ANY
BEGIN
    POPUP "SampleMenu"
    BEGIN
        MENUITEM "Sub1",                        ID_SUB_MENU_1
        MENUITEM "Sub2",                        ID_SUB_MENU_2
    END
END

当您初始化对话框时。您应该插入一些代码,如下所示:

//Your split button
CMFCSplitButton m_btnAny;

//Set dropdown menu
m_btnAny.SetDropDownMenu(IDR_MENU_BUTTON_ANY, 0);

更多,我找到了以下链接。作者举了一个例子。它可能会帮助你。 http://codexpert.ro/blog/2013/02/01/split-button-control/#comment-22983

【讨论】:

以上是关于在MFC中如何在拆分按钮控件的BCN_DROPDOWN事件上显示列表框的主要内容,如果未能解决你的问题,请参考以下文章

MFC 命令按钮控件如何在多字节字符集项目中显示?

MFC中如何向列表控件中嵌入单选按钮radio控件

如何更改MFC按钮的背景色

如何使用 CSpinButtonCtrl 类在 MFC 中动态创建微调按钮控件?

如何根据 mfc 中的列表控件选择禁用按钮

VC MFC 框架中 添加按钮控件