函數介紹:CButtonST應用
DWORD CButtonST::SetMenu(UINT nMenu, HWND hParentWnd, BOOL bRepaint)
{
HINSTANCE hInstResource = NULL;
// Destroy any previous menu
if (m_hMenu)
{
::DestroyMenu(m_hMenu);
m_hMenu = NULL;
m_hParentWndMenu = NULL;
m_bMenuDisplayed = FALSE;
} // if
// Load menu
if (nMenu)
{
// Find correct resource handle
hInstResource = AfxFindResourceHandle(MAKEINTRESOURCE(nMenu), RT_MENU);
// Load menu resource
m_hMenu = ::LoadMenu(hInstResource, MAKEINTRESOURCE(nMenu));
m_hParentWndMenu = hParentWnd;
// If something wrong
if (m_hMenu == NULL) return BTNST_INVALIDRESOURCE;
} // if
// Repaint the button
if (bRepaint) Invalidate();
return BTNST_OK;
} // End of SetMenu
DWORD CButtonST::SetMenu(UINT nMenu, HWND hParentWnd, BOOL bWinXPStyle, UINT nToolbarID, CSize sizeToolbarIcon, COLORREF crToolbarBk, BOOL bRepaint) //除前兩個參數,其他參數都有初始值
{
BOOL bRetValue = FALSE;
// Destroy any previous menu
if (m_menuPopup.m_hMenu)
{
m_menuPopup.DestroyMenu();
m_hParentWndMenu = NULL;
m_bMenuDisplayed = FALSE;
} // if
// Load menu
if (nMenu)
{
m_menuPopup.SetMenuDrawMode(bWinXPStyle);
// Load menu
bRetValue = m_menuPopup.LoadMenu(nMenu);
// If something wrong
if (bRetValue == FALSE) return BTNST_INVALIDRESOURCE;
// Load toolbar
if (nToolbarID)
{
m_menuPopup.SetBitmapBackground(crToolbarBk);
m_menuPopup.SetIconSize(sizeToolbarIcon.cx, sizeToolbarIcon.cy);
bRetValue = m_menuPopup.LoadToolbar(nToolbarID);
// If something wrong
if (bRetValue == FALSE)
{
m_menuPopup.DestroyMenu();
return BTNST_INVALIDRESOURCE;
} // if
} // if
m_hParentWndMenu = hParentWnd;
} // if
// Repaint the button
if (bRepaint) Invalidate();
return BTNST_OK;
} // End of SetMenu
通過
#ifdef BTNST_USE_BCMENU 來判斷選擇哪個函數。
程序過程:
頭文件:
CButtonST m_btnHelp;
源文件:
1)在當前對話類的初始化函數中添加:
OnInitDialog() m_btnHelp.SetIcon(IDI_HELP, (int)BTNST_AUTO_GRAY); //設置圖標,未點擊時變灰
m_btnHelp.SetTooltipText(_T("Help")); //輸出文字
#ifdef BTNST_USE_BCMENU
m_btnHelp.SetMenu(IDR_MENU, m_hWnd); //點擊時彈出菜單欄
#else
m_btnHelp.SetMenu(IDR_MENU, m_hWnd);
#endif
2)設置控件交換信息:
DoDataExchange(CDataExchange* pDX)函數中
DDX_Control(pDX,IDC_BUTTON1,m_btnHelp); //輸出
3)新菜單欄響應函數:
新建一菜單欄:IDR_MENUNEW,設置為POP-UP;
設置子菜單:IDR_ITEM1.點擊ClassWizard,選擇當前文檔類點擊ON_COMMAND設置響應函數。