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

📄 donutfavoritesmenu.h

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

#pragma once

#include "FavoritesMenu.h"

template <class _MainFrame>
class CDonutFavoritesMenu : public CFavoritesMenu<CDonutFavoritesMenu>
{
public:
	_MainFrame* __m_pMainFrame;

	CDonutFavoritesMenu(_MainFrame* __pMainFrame, int nInsertPointMenuItemID)
		: CFavoritesMenu<CDonutFavoritesMenu>(nInsertPointMenuItemID, _T("(empty)"),
		  0x1001, 0x7530, _T("Open All")),
		  __m_pMainFrame(__pMainFrame)
	{
		RefreshMenu();
	}

// Overrides
	void OnExecute(const CString& strFilePath)
	{
		_The_OpenAllFiles(strFilePath, __m_pMainFrame);
	}

	void RefreshMenu()
	{
		SetStyle(CFavoritesMenuOption::GetStyle());
		m_nMaxMenuItemTextLength = CFavoritesMenuOption::GetMaxMenuItemTextLength();
		m_nMaxMenuBreakCount = CFavoritesMenuOption::GetMaxMenuBreakCount();

		SetRootDirectoryPath(DonutGetFavoritesFolder());
	}
};

class CFavoritesMenuOption
{
public:
	static DWORD s_dwStyle;
	static DWORD s_dwMaxMenuItemTextLength;
	static DWORD s_dwMaxMenuBreakCount;
	static CString* s_pUserDirectory;

	static CSimpleArray<HWND>* s_pWnds;

	static void Init()
	{
		s_pWnds = new CSimpleArray<HWND>;
		s_pUserDirectory = new CString();

		GetProfile();
	}

	static void Term()
	{
		WriteProfile();

		delete s_pWnds;
		delete s_pUserDirectory;
	}

	static void Add(HWND hWnd)
	{
		s_pWnds->Add(hWnd);
	}

	static void CallBack()
	{
		for (int i = 0; i < s_pWnds->GetSize(); ++i) {
			HWND hWnd = (*s_pWnds)[i];
			if (::IsWindow(hWnd))
				MtlPostCommand(hWnd, ID_VIEW_REFRESH_FAVBAR);
		}
	}

	static CString GetUserDirectory()
	{
		return *s_pUserDirectory;
	}

	static void SetUserDirectory(const CString& strPath)
	{
		*s_pUserDirectory = strPath;
	}

	static DWORD GetStyle()
	{
		return s_dwStyle;
	}

	static void SetStyle(DWORD dwStyle)
	{
		s_dwStyle = dwStyle;
	}

	static void SetMaxMenuItemTextLength(DWORD n)
	{
		s_dwMaxMenuItemTextLength = n;
	}

	static DWORD GetMaxMenuItemTextLength()
	{
		return s_dwMaxMenuItemTextLength;
	}

	static void SetMaxMenuBreakCount(DWORD n)
	{
		s_dwMaxMenuBreakCount = n;
	}

	static DWORD GetMaxMenuBreakCount()
	{
		return s_dwMaxMenuBreakCount;
	}

	static void GetProfile()
	{
		CIniSection pr;

		pr.Open(_szIniFileName, _T("FavoritesMenu"));
		pr.QueryValue(s_dwStyle, _T("Style"));
		pr.QueryValue(s_dwMaxMenuItemTextLength, _T("Max_Text_Length"));
		pr.QueryValue(s_dwMaxMenuBreakCount, _T("Max_Break_Count"));

		TCHAR szPath[MAX_PATH]; szPath[0] = _T('\0');
		DWORD dwCount = MAX_PATH;
		pr.QueryValue(szPath, _T("UserFolder"), &dwCount);
		*s_pUserDirectory = szPath;

		pr.Close();
	}

	static void WriteProfile()
	{
		CIniSection pr;

		pr.Open(_szIniFileName, _T("FavoritesMenu"));
		pr.SetValue(s_dwStyle, _T("Style"));
		pr.SetValue(*s_pUserDirectory, _T("UserFolder"));
		pr.SetValue(s_dwMaxMenuItemTextLength, _T("Max_Text_Length"));
		pr.SetValue(s_dwMaxMenuBreakCount, _T("Max_Break_Count"));

		pr.Close();
	}
};

__declspec(selectany) DWORD CFavoritesMenuOption::s_dwStyle = 0;
__declspec(selectany) DWORD CFavoritesMenuOption::s_dwMaxMenuItemTextLength = 55;
__declspec(selectany) DWORD CFavoritesMenuOption::s_dwMaxMenuBreakCount = 5000;
__declspec(selectany) CSimpleArray<HWND>* CFavoritesMenuOption::s_pWnds = NULL;
__declspec(selectany) CString* CFavoritesMenuOption::s_pUserDirectory = NULL;

class CDonutFavoritesMenuPropertyPage : public CPropertyPageImpl<CDonutFavoritesMenuPropertyPage>,
	public CWinDataExchange<CDonutFavoritesMenuPropertyPage>
{
public:
// Constants
	enum { IDD = IDD_PROPPAGE_EXPMENU };

// Data members
	int m_nAdditionalCheck, m_nOrder;
	int m_nMaxMenuItemTextLength;
	int m_nMaxMenuBreakCount;

	CString m_strFolder;
	int m_nUserFolder;

	CEdit m_editUserFolder;

// Message map and handlers
	BEGIN_MSG_MAP(COpenURLDlg)
		COMMAND_ID_HANDLER(IDC_BUTTON_FAVMENU_USER, OnBtnFavMenuUser)
		CHAIN_MSG_MAP(CPropertyPageImpl<CDonutFavoritesMenuPropertyPage>)
	END_MSG_MAP()

	LRESULT OnBtnFavMenuUser(WORD /*wNotifyCode*/, WORD wID, HWND /*hWndCtl*/, BOOL& /*bHandled*/)
	{
		CString strEdit = _BrowseForFolder();
		if (!strEdit.IsEmpty())
			m_editUserFolder.SetWindowText(strEdit);

		return 0;
	}

// DDX map
	BEGIN_DDX_MAP(CDonutFavoritesMenuPropertyPage)
		DDX_CHECK(IDC_CHECK_EXPMENU_ADDITIONAL, m_nAdditionalCheck)
		DDX_CHECK(IDC_CHECK_FAVMENU_ORDER, m_nOrder)
		DDX_INT_RANGE(IDC_EDIT_EXPMENU_ITEMTEXTMAX, m_nMaxMenuItemTextLength, 1, 255)
		DDX_INT_RANGE(IDC_EDIT_EXPMENU_BREAKCOUNTMAX, m_nMaxMenuBreakCount, 2, 5000)

		DDX_TEXT(IDC_EDIT_FAVMENU_USER, m_strFolder)
		DDX_CHECK(IDC_CHECK_FAVMENU_USER, m_nUserFolder)
	END_DDX_MAP()

// Constructor
	CDonutFavoritesMenuPropertyPage()
	{
		m_nAdditionalCheck = _check_flag(EMS_ADDITIONALMENUITEM, CFavoritesMenuOption::GetStyle()) ? 1 : 0;
		m_nOrder = _check_flag(EMS_ORDER_FAVORITES, CFavoritesMenuOption::GetStyle()) ? 1 : 0;

		m_nMaxMenuItemTextLength = CFavoritesMenuOption::GetMaxMenuItemTextLength();
		m_nMaxMenuBreakCount = CFavoritesMenuOption::GetMaxMenuBreakCount();

		m_nUserFolder = _check_flag(EMS_USER_DEFINED_FOLDER, CFavoritesMenuOption::GetStyle()) ? 1 : 0;
		m_strFolder = CFavoritesMenuOption::GetUserDirectory();
	}

// Overrides
	BOOL OnSetActive()
	{
		SetModified(TRUE);

		if (m_editUserFolder.m_hWnd == NULL)
			m_editUserFolder.Attach(GetDlgItem(IDC_EDIT_FAVMENU_USER));

		return DoDataExchange(FALSE);
	}

	BOOL OnKillActive()
	{
		return DoDataExchange(TRUE);
	}

	BOOL OnApply()
	{
		if (DoDataExchange(TRUE)) {
			DWORD dwStyle = 0;
			if (m_nAdditionalCheck == 1)
				dwStyle |= EMS_ADDITIONALMENUITEM;
			if (m_nOrder == 1)
				dwStyle |= EMS_ORDER_FAVORITES;
			if (m_nUserFolder == 1)
				dwStyle |= EMS_USER_DEFINED_FOLDER;

			CFavoritesMenuOption::SetStyle(dwStyle);
			CFavoritesMenuOption::SetMaxMenuItemTextLength(m_nMaxMenuItemTextLength);
			CFavoritesMenuOption::SetMaxMenuBreakCount(m_nMaxMenuBreakCount);
			CFavoritesMenuOption::SetUserDirectory(m_strFolder);
			CFavoritesMenuOption::CallBack();
			return TRUE;
		}
		else 
			return FALSE;
	}

	CString _BrowseForFolder()
	{
		TCHAR pszDisplayName[MAX_PATH];

		BROWSEINFO bi = { m_hWnd, NULL, pszDisplayName, _T("User-defined Favorites Folder"),
			BIF_RETURNONLYFSDIRS, NULL, 0, 0 };
 
		CItemIDList idl;
		idl.Attach(::SHBrowseForFolder(&bi));
		return idl.GetPath();
	}
};

inline CString DonutGetFavoritesFolder()
{
	if (_check_flag(EMS_USER_DEFINED_FOLDER, CFavoritesMenuOption::GetStyle())) {
		CString strDir = CFavoritesMenuOption::GetUserDirectory();
		if (!strDir.IsEmpty()) {
			return strDir; 
		}
	}

	CString strStdDir;
	MtlGetFavoritesFolder(strStdDir);

	return strStdDir;
}

inline CString DonutGetFavoriteGroupFolder()
{
	TCHAR sz[MAX_PATH];
	::GetModuleFileName(_Module.GetModuleInstance(), sz, MAX_PATH);
	CString strPath(sz);

	int nIndex = strPath.ReverseFind(_T('\\'));
	strPath = strPath.Left(nIndex);
	strPath += _T("\\FavoriteGroup\\");

	return strPath;
}

⌨️ 快捷键说明

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