WTL - 按钮菜单 2






2.33/5 (2投票s)
2000年9月12日

52406

1475
使用带下拉菜单的按鈕
更新于2001年3月18日。现在增加了键盘和焦点提示(仅适用于W2k/Me)
引言
这段代码基于 Norm Almond 和 David Peterson 撰写的文章。
为什么要写一个新的?我需要一个像推按钮一样**完全**工作的菜单按钮。我相信我做到了。
尽管如此,我的按钮不如 Norm Almond 的按钮那么酷。我的意思是,没有用于显示位图的代码。你可以自由地自己添加它,或者从 Norm Almond 的文章中借用。
实现
我开发了两个类:CMenuButton
和 CAutoMenuButton
。CAutoMenuButtonM
与 CMenuButton
相同,但将它的标题作为第一个和默认的菜单项添加。这是一种很有用的行为,不是吗?
如何使用
首先,让你的父类支持通知消息的反射
BEGIN_MSG_MAP(CMainDlg) MESSAGE_HANDLER(WM_INITDIALOG, OnInitDialog) COMMAND_ID_HANDLER(IDOK, OnOK) COMMAND_RANGE_HANDLER(ID_FILE_NEW, ID_FILE_CLOSE, OnFileCmd) <U>REFLECT_NOTIFICATIONS()</U> END_MSG_MAP()
然后,声明你的按钮
WTLEX::CAutoMenuButton m_ctlOK;
WTLEX::CMenuButton m_ctlButtons[4];
并为其分配一个ID
m_ctlOK = GetDlgItem(IDOK); for(int i = 0; i < 4; i++) { m_ctlButtons[i] = GetDlgItem(IDC_NORMAL + i); m_ctlButtons[i].SetMenuID(IDR_BTNMENU); }
当你通过构造函数提供ID时,不需要调用SetMenuID
CMainDlg() : m_ctlOK(IDR_BTNMENU) { }
就是这样:)