📄 donutfavoritesmenu.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 + -