⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 donuttoolbar.h

📁 一个使用wtl写的完整的多窗口浏览器
💻 H
字号:

#pragma once

#include "StdToolBarCtrl.h"

class CDonutToolBar :
	public CStdToolBarCtrlImpl<CDonutToolBar>,
	public CChevronHandler<CDonutToolBar>
{
public:
	DECLARE_WND_SUPERCLASS(_T("Donut_ToolBar"), GetWndClassName())

// Data members;
	CMenuHandle m_menuFavorites;

// Ctor
	void DonutToolBar_SetFavoritesMenu(HMENU hMenu)
	{
		m_menuFavorites = hMenu;
	}

// Message map and handelrs
	BEGIN_MSG_MAP(CDonutToolBar)
		REFLECTED_NOTIFY_CODE_HANDLER(RBN_CHEVRONPUSHED, OnChevronPushed)
		CHAIN_MSG_MAP(CStdToolBarCtrlImpl<CDonutToolBar>)
	END_MSG_MAP()

	LRESULT OnChevronPushed(int /*idCtrl*/, LPNMHDR pnmh, BOOL& bHandled)
	{
		ATLASSERT( ((LPNMREBARCHEVRON)pnmh)->wID == GetDlgCtrlID() );
		if (!PushChevron(pnmh, GetTopLevelParent())) {
			bHandled = FALSE;
			return 1;
		}

		return 0;
	}

// Implemantation
	HMENU _GetDropDownMenu(int nCmdID, bool& bDestroy, bool& bSubMenu)
	{
		CMenuHandle menu;// handle
		bDestroy = bSubMenu = true;

		switch (nCmdID) {
		case ID_FILE_NEW:
			menu.LoadMenu(IDR_FILE_NEW);
			break;
		case ID_VIEW_FONT_SIZE:
			menu.LoadMenu(IDR_VIEW_FONT_SIZE);
			break;
		case ID_FILE_NEW_CLIPBOARD2:
			menu.LoadMenu(IDR_FILE_NEW_CLIPBOARD);
			break;
		case ID_VIEW_BACK:
			menu.LoadMenu(IDR_VIEW_BACK);
			break;
		case ID_VIEW_FORWARD:
			menu.LoadMenu(IDR_VIEW_FORWARD);
			break;
		case ID_FAVORITES_DROPDOWN:
			menu = m_menuFavorites;
			bDestroy = bSubMenu = false;// it's not mine.
			break;
		default:
			ATLASSERT(FALSE);
		}

		return menu.m_hMenu;
	}

// Overrides
	HMENU ChevronHandler_OnGetChevronMenu(int nCmdID, HMENU& hMenuDestroy)
	{
//		if (nCmdID == ID_VIEW_FAVEXPBAR)
//			return NULL;// give up.

		bool bDestroy, bSubMenu;
		CMenuHandle menu = _GetDropDownMenu(nCmdID, bDestroy, bSubMenu);

		if (bDestroy)
			hMenuDestroy = menu.m_hMenu;

		if (bSubMenu)
			return menu.GetSubMenu(0);
		else
			return menu;
	}

	void Chevronhandler_OnCleanupChevronMenu()
	{
//		m_menuFavorites.RemoveMenu(ID_FAVORITES_DROPDOWN, MF_BYCOMMAND);
	}

	LRESULT StdToolBar_OnDropDown(int nCmdID)
	{
		bool bDestroy, bSubMenu;
		CMenuHandle menu = _GetDropDownMenu(nCmdID, bDestroy, bSubMenu);

		if (menu.m_hMenu) {
			if (bSubMenu)
				StdToolBar_TrackDropDownMenu(nCmdID, menu.GetSubMenu(0), GetTopLevelParent());
			else
				StdToolBar_TrackDropDownMenu(nCmdID, menu, GetTopLevelParent());
		}

		if (bDestroy)
			menu.DestroyMenu();

		return TBDDRET_DEFAULT;
	}

	void StdToolBar_WriteProfile()
	{
		CIniSection pr;
		pr.Open(_szIniFileName, _T("ToolBar"));
		
		MtlWriteProfileTBBtns(pr, m_hWnd);
		pr.SetValue(m_dwStdToolBarStyle, _T("Std_ToolBar_Style"));
	}

	void StdToolBar_GetProfile()
	{
		CIniSection pr;
		pr.Open(_szIniFileName, _T("ToolBar"));
		
		CSimpleArray<int> arrBmpIndex;
		if (MtlGetProfileTBBtns(pr, arrBmpIndex))
			StdToolBar_InitButtons(_begin(arrBmpIndex), _end(arrBmpIndex));
		else
			StdToolBar_InitButtons(_begin(m_arrBmpDefaultIndex), _end(m_arrBmpDefaultIndex));

		DWORD dwStyle = STD_TBSTYLE_DEFAULT;
		pr.QueryValue(dwStyle, _T("Std_ToolBar_Style"));

		StdToolBar_SetStyle(dwStyle);
	}

// Methods
	HWND DonutToolBar_Create(HWND hWndParent)
	{
		STD_TBBUTTON btns[] = {
			{ID_FILE_NEW,		BTNS_BUTTON|BTNS_DROPDOWN},
			{ID_VIEW_BACK,		BTNS_BUTTON|BTNS_STD_LIST|BTNS_DROPDOWN},
			{ID_VIEW_FORWARD,	BTNS_BUTTON|BTNS_STD_LIST|BTNS_DROPDOWN},
			{ID_VIEW_STOP,		BTNS_BUTTON}, 
			{ID_VIEW_REFRESH,	BTNS_BUTTON}, 
			{ID_VIEW_HOME,		BTNS_BUTTON},
			{ID_FILE_NEW_CLIPBOARD2,	BTNS_BUTTON|BTNS_DROPDOWN}, 

			{ID_VIEW_STOP_ALL,		BTNS_BUTTON}, 
			{ID_VIEW_REFRESH_ALL,	BTNS_BUTTON},

			{ID_VIEW_FAVEXPBAR,		BTNS_BUTTON|BTNS_STD_LIST/*|BTNS_DROPDOWN*/}, 
			{ID_VIEW_CLIPBOARDBAR,	BTNS_BUTTON|BTNS_STD_LIST},

			{ID_FILE_PRINT,		BTNS_BUTTON},

			{ID_VIEW_FULLSCREEN,	BTNS_BUTTON}, 
			{ID_WINDOW_CASCADE,		BTNS_BUTTON}, 
			{ID_WINDOW_TILE_HORZ,	BTNS_BUTTON}, 
			{ID_WINDOW_TILE_VERT,	BTNS_BUTTON},

			{ID_VIEW_TABBAR_MULTI,	BTNS_BUTTON}, 
			{ID_TAB_LEFT,			BTNS_BUTTON}, 
			{ID_TAB_RIGHT,			BTNS_BUTTON}, 

			{ID_EDIT_CUT,			BTNS_BUTTON}, 
			{ID_EDIT_COPY,			BTNS_BUTTON}, 
			{ID_EDIT_PASTE,			BTNS_BUTTON},

			{ID_VIEW_FONT_SIZE,			BTNS_BUTTON|BTNS_DROPDOWN|BTNS_WHOLEDROPDOWN}, 
			{ID_DOCHOSTUI_OPENNEWWIN,	BTNS_BUTTON},

			{ID_DLCTL_DLIMAGES,			BTNS_BUTTON}, 
			{ID_DLCTL_SCRIPTS,			BTNS_BUTTON},	
			{ID_DLCTL_JAVA,				BTNS_BUTTON}, 
			{ID_DLCTL_RUNACTIVEXCTLS,	BTNS_BUTTON},	
			{ID_DLCTL_DLACTIVEXCTLS,	BTNS_BUTTON}, 
			{ID_DLCTL_BGSOUNDS,			BTNS_BUTTON},	
			{ID_DLCTL_VIDEOS,			BTNS_BUTTON}, 

			{ID_FILE_CLOSE,			BTNS_BUTTON}, 
			{ID_WINDOW_CLOSE_ALL,	BTNS_BUTTON},	
			{ID_WINDOW_CLOSE_EXCEPT,BTNS_BUTTON}, 

			{ID_MAIN_EX_NEWWINDOW,			BTNS_BUTTON}, 
			{ID_MAIN_EX_NOACTIVATE,			BTNS_BUTTON},	
			{ID_MAIN_EX_NOACTIVATE_NEWWIN,	BTNS_BUTTON}, 
			{ID_REGISTER_AS_BROWSER,		BTNS_BUTTON}, 
			{ID_FAVORITES_DROPDOWN,			BTNS_BUTTON|BTNS_STD_LIST|BTNS_DROPDOWN|BTNS_WHOLEDROPDOWN},
			{ID_EDIT_OPEN_SELECTED_REF,		BTNS_BUTTON},
			{ID_EDIT_OPEN_SELECTED_TEXT,	BTNS_BUTTON},
		};

		int defaultBtns[] = { 0, 1, 2, 3, 4, 5, -1, 9, 10, -1, 11 };

		StdToolBar_Init(btns, btns + _countof(btns),
			defaultBtns, defaultBtns + _countof(defaultBtns),
			std::make_pair(IDB_MAINFRAME_TOOLBAR, IDB_MAINFRAME_TOOLBAR_HOT),
			std::make_pair(IDB_MAINFRAME_LARGE_TOOLBAR, IDB_MAINFRAME_LARGE_TOOLBAR_HOT));

		return StdToolBar_Create(hWndParent,
			ATL_SIMPLE_TOOLBAR_PANE_STYLE|  CCS_ADJUSTABLE | TBSTYLE_ALTDRAG,
			TBSTYLE_EX_MIXEDBUTTONS | TBSTYLE_EX_DRAWDDARROWS | TBSTYLE_EX_HIDECLIPPEDBUTTONS);
	}
};

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -