WTL - Button Menu 2






2.33/5 (2 votes)
Sep 12, 2000

51870

1475
Use of a Push button with a drop down menu
Updated 18 march 2001. Now with keyboard and focus cues (only for W2k/Me)
Introduction
This code was based on articles written by Norm Almond and David Peterson.
Why a new one? I needed a menu button that acts exactly like a pushbutton. I believe I have done it.
Nevertheless, my button is not as cool as Norm Almond's is. I mean, there is no code for displaying a bitmap. Feel free to add it yourself or borrow it from Norm Almond's article.
Implementation
I have developed two classes: CMenuButton
and CAutoMenuButton
. CAutoMenuButtonM
is the same button as CMenuButton
, but adds its caption as the first and default menu item.
Useful behavior, isn't it?
How To Use
First of all, make your parent class support reflection of notification messages:
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()
Then, declare your buttons:
WTLEX::CAutoMenuButton m_ctlOK;
WTLEX::CMenuButton m_ctlButtons[4];
And assign it an 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); }
SetMenuID does not need to be called when you supply it in the constructor:
CMainDlg() : m_ctlOK(IDR_BTNMENU) { }
That's all :)