在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事件上显示列表框的主要内容,如果未能解决你的问题,请参考以下文章