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

📄 donutoptions.h

📁 一个使用wtl写的完整的多窗口浏览器
💻 H
📖 第 1 页 / 共 3 页
字号:

#pragma once

#define MAIN_EX_NEWWINDOW			0x00000001L
#define MAIN_EX_NOACTIVATE			0x00000002L
// #define MAIN_EX_NOINITWND	0x00000004L obsolete
#define MAIN_EX_ONEINSTANCE			0x00000008L
#define MAIN_EX_WINDOWLIMIT			0x00000010L
#define MAIN_EX_NOCLOSEDFG			0x00000020L
#define MAIN_EX_NOMDI				0x00000040L
// #define MAIN_EX_VIEWCLIPBOARD		0x00000080L
#define MAIN_EX_FULLSCREEN			0x00000100L
#define MAIN_EX_BACKUP				0x00000200L
#define MAIN_EX_NOACTIVATE_NEWWIN	0x00000400L
#define MAIN_EX_ADDFAVORITEOLDSHELL	0x00000800L
#define MAIN_EX_ORGFAVORITEOLDSHELL	0x00001000L
#define MAIN_EX_GLOBALOFFLINE		0x00002000L
#define MAIN_EX_LOADGLOBALOFFLINE	0x00004000L
#define MAIN_EX_KILLDIALOG			0x00008000L
#define MAIN_EX_REGISTER_AS_BROWSER	0x00010000L
#define MAIN_EX_INHERIT_OPTIONS		0x00020000L 

#include "RecentDocumentListFixed.h"

class CMainOption
{
public:
	static DWORD s_dwMainExtendedStyle;
	static DWORD s_dwMaxWindowCount;
	static DWORD s_dwBackUpTime;
	static bool s_bTabMode;

	static bool s_bAppClosing;
	static bool s_bIgnoreUpdateClipboard;// for insane WM_DRAWCLIBOARD

	static CRecentDocumentListFixed* s_pMru;

	static void GetProfile()
	{
		CIniSection pr;

		pr.Open(_szIniFileName, _T("Main"));
		pr.QueryValue(s_dwMainExtendedStyle, _T("Extended_Style"));
		pr.QueryValue(s_dwMaxWindowCount, _T("Max_Window_Count"));
		pr.QueryValue(s_dwBackUpTime, _T("BackUp_Time"));
		pr.Close();

		s_pMru = new CRecentDocumentListFixed;
		s_pMru->SetMaxEntries(9);
		s_pMru->ReadFromIniFile();

		if (s_dwMainExtendedStyle & MAIN_EX_NOMDI)
			s_bTabMode = true;
		else
			s_bTabMode = false;

		// NOTE. If all the Web Browser server on your desktop is unloaded, some OS automatically goes online.
		//       And if all the Web Browser server on you application is unloaded, some OS automatically goes online.
		if (_check_flag(MAIN_EX_LOADGLOBALOFFLINE, s_dwMainExtendedStyle))
			MtlSetGlobalOffline(_check_flag(MAIN_EX_GLOBALOFFLINE, s_dwMainExtendedStyle));
	}

	static void WriteProfile()
	{
		CIniSection pr;

		if (MtlIsGlobalOffline())
			s_dwMainExtendedStyle |= MAIN_EX_GLOBALOFFLINE;
		else
			s_dwMainExtendedStyle &= ~MAIN_EX_GLOBALOFFLINE;

		pr.Open(_szIniFileName, _T("Main"));
		pr.SetValue(s_dwMainExtendedStyle, _T("Extended_Style"));
		pr.SetValue(s_dwMaxWindowCount, _T("Max_Window_Count"));
		pr.SetValue(s_dwBackUpTime, _T("BackUp_Time"));
		pr.Close();

		s_pMru->WriteToIniFile();
		delete s_pMru;
	}

	static void SetMRUMenuHandle(HMENU hMenu, int nPos)
	{
		HMENU hFileMenu = ::GetSubMenu(hMenu, 0);
#ifdef _DEBUG
		// absolute position, can change if menu changes
		TCHAR szMenuString[100];
		::GetMenuString(hFileMenu, nPos, szMenuString, sizeof(szMenuString), MF_BYPOSITION);
		ATLASSERT(lstrcmp(szMenuString, _T("Open &File")) == 0);
#endif //_DEBUG
		HMENU hMruMenu = ::GetSubMenu(hFileMenu, nPos);
		CMainOption::s_pMru->SetMenuHandle(hMruMenu);
		CMainOption::s_pMru->UpdateMenu();
	}

// Data members

// Constructor
	CMainOption() { }

	static bool IsQualify(int nWindowCount)
	{
		if (!(s_dwMainExtendedStyle & MAIN_EX_WINDOWLIMIT))
			return true;

		if (nWindowCount < s_dwMaxWindowCount)
			return true;
		else
			return false;
	}

// Message map and handlers
	BEGIN_MSG_MAP(CMainFrame)
		COMMAND_ID_HANDLER_EX(ID_MAIN_EX_NEWWINDOW, OnMainExNewWindow)
		COMMAND_ID_HANDLER_EX(ID_MAIN_EX_NOACTIVATE, OnMainExNoActivate)
		COMMAND_ID_HANDLER_EX(ID_MAIN_EX_NOACTIVATE_NEWWIN, OnMainExNoActivateNewWin)
	END_MSG_MAP()

	void OnMainExNewWindow(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/)
	{
		if (s_dwMainExtendedStyle & MAIN_EX_NEWWINDOW)
			s_dwMainExtendedStyle &= ~MAIN_EX_NEWWINDOW;
		else
			s_dwMainExtendedStyle |= MAIN_EX_NEWWINDOW;
	}

	void OnMainExNoActivate(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/)
	{
		if (s_dwMainExtendedStyle & MAIN_EX_NOACTIVATE)
			s_dwMainExtendedStyle &= ~MAIN_EX_NOACTIVATE;
		else
			s_dwMainExtendedStyle |= MAIN_EX_NOACTIVATE;
	}

	void OnMainExNoActivateNewWin(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/)
	{
		if (s_dwMainExtendedStyle & MAIN_EX_NOACTIVATE_NEWWIN)
			s_dwMainExtendedStyle &= ~MAIN_EX_NOACTIVATE_NEWWIN;
		else
			s_dwMainExtendedStyle |= MAIN_EX_NOACTIVATE_NEWWIN;
	}

// Update command UI and handlers
	BEGIN_UPDATE_COMMAND_UI_MAP(CMainOption)
		UPDATE_COMMAND_UI_SETCHECK_FLAG(ID_MAIN_EX_NEWWINDOW, MAIN_EX_NEWWINDOW, s_dwMainExtendedStyle)
		UPDATE_COMMAND_UI_SETCHECK_FLAG(ID_MAIN_EX_NOACTIVATE, MAIN_EX_NOACTIVATE, s_dwMainExtendedStyle)
		UPDATE_COMMAND_UI_SETCHECK_FLAG(ID_MAIN_EX_NOACTIVATE_NEWWIN, MAIN_EX_NOACTIVATE_NEWWIN, s_dwMainExtendedStyle)
		UPDATE_COMMAND_UI_SETCHECK_FLAG(ID_REGISTER_AS_BROWSER, MAIN_EX_REGISTER_AS_BROWSER, s_dwMainExtendedStyle)
	END_UPDATE_COMMAND_UI_MAP()
};

__declspec(selectany) DWORD CMainOption::s_dwMainExtendedStyle = MAIN_EX_NEWWINDOW|MAIN_EX_NOACTIVATE|MAIN_EX_NOACTIVATE_NEWWIN;
__declspec(selectany) DWORD CMainOption::s_dwMaxWindowCount = 0;
__declspec(selectany) DWORD CMainOption::s_dwBackUpTime = 1;
__declspec(selectany) bool CMainOption::s_bTabMode = false;

__declspec(selectany) bool CMainOption::s_bAppClosing = false;
__declspec(selectany) bool CMainOption::s_bIgnoreUpdateClipboard = false;

__declspec(selectany) CRecentDocumentListFixed* CMainOption::s_pMru = NULL;

/////////////////////////////////////////////////////////////////////////////
// CMainPropertyPage

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

// Data members
	int m_nNewWindow, m_nNoActivate, m_nNoActivateNewWin,
		m_nOneInstance, m_nLimit, m_nNoCloseDFG, m_nNoMDI, m_nBackUp,
		m_nAddFavoriteOldShell, m_nOrgFavoriteOldShell, m_nRegisterAsBrowser;
	int m_nMaxWindowCount, m_nBackUpTime;
	int m_nLoadGlobalOffline, m_nKillDialog;
	int m_nInheritOptions;
	CWindow m_wnd;

// DDX map
	BEGIN_DDX_MAP(CMainPropertyPage)
		DDX_CHECK(IDC_CHECK_MAIN_NEWWINDOW, m_nNewWindow)
		DDX_CHECK(IDC_CHECK_MAIN_NOACTIVATE, m_nNoActivate)
		DDX_CHECK(IDC_CHECK_MAIN_NOACTIVATE_NEWWIN, m_nNoActivateNewWin)
		DDX_CHECK(IDC_CHECK_MAIN_NOMDI, m_nNoMDI)
		DDX_CHECK(IDC_CHECK_MAIN_INHERIT_OPTIONS, m_nInheritOptions)
		DDX_CHECK(IDC_CHECK_ONEINSTANCE, m_nOneInstance)
		DDX_CHECK(IDC_CHECK_MAIN_LIMIT, m_nLimit)
		DDX_CHECK(IDC_CHECK_MAIN_BACKUP, m_nBackUp)
		DDX_CHECK(IDC_CHECK_MAIN_NOCLOSEDFG, m_nNoCloseDFG)
		DDX_CHECK(IDC_CHECK_MAIN_ADDFAVORITEOLDSHELL, m_nAddFavoriteOldShell)
		DDX_CHECK(IDC_CHECK_MAIN_ORGFAVORITEOLDSHELL, m_nOrgFavoriteOldShell)
		DDX_CHECK(IDC_CHECK_MAIN_LOADGLOBALOFFLINE, m_nLoadGlobalOffline)
		DDX_CHECK(IDC_CHECK_MAIN_KILLDIALOG, m_nKillDialog)
		DDX_CHECK(IDC_CHECK_MAIN_REGISTER_AS_BROWSER, m_nRegisterAsBrowser)
		DDX_INT_RANGE(IDC_EDIT_MAIN_LIMITEDCOUNT, m_nMaxWindowCount, 0, 255)
		DDX_INT_RANGE(IDC_EDIT_MAIN_BACKUPTIME, m_nBackUpTime, 1, 120)
	END_DDX_MAP()

// Constructor
	CMainPropertyPage(HWND hWnd) : m_wnd(hWnd)
	{
		_SetData();
	}

// Overrides
	BOOL OnSetActive()
	{
		SetModified(TRUE);
		return DoDataExchange(FALSE);
	}
	BOOL OnKillActive()
	{
		return DoDataExchange(TRUE);
	}
	BOOL OnApply()
	{
		if (DoDataExchange(TRUE)) {
			_GetData();
			return TRUE;
		}
		else 
			return FALSE;
	}

// Implementation
protected:
	void _GetData()
	{
		// Update main style
		CMainOption::s_dwMainExtendedStyle = 0;
		if (m_nNewWindow == 1)
			CMainOption::s_dwMainExtendedStyle |= MAIN_EX_NEWWINDOW;
		if (m_nNoActivate == 1)
			CMainOption::s_dwMainExtendedStyle |= MAIN_EX_NOACTIVATE;
		if (m_nNoActivateNewWin == 1)
			CMainOption::s_dwMainExtendedStyle |= MAIN_EX_NOACTIVATE_NEWWIN;
		if (m_nOneInstance == 1) 
			CMainOption::s_dwMainExtendedStyle |= MAIN_EX_ONEINSTANCE;
		if (m_nLimit == 1)
			CMainOption::s_dwMainExtendedStyle |= MAIN_EX_WINDOWLIMIT;
		if (m_nNoCloseDFG == 1)
			CMainOption::s_dwMainExtendedStyle |= MAIN_EX_NOCLOSEDFG;
		if (m_nNoMDI == 1)
			CMainOption::s_dwMainExtendedStyle |= MAIN_EX_NOMDI;
		if (m_nBackUp == 1)
			CMainOption::s_dwMainExtendedStyle |= MAIN_EX_BACKUP;
		if (m_nAddFavoriteOldShell == 1)
			CMainOption::s_dwMainExtendedStyle |= MAIN_EX_ADDFAVORITEOLDSHELL;
		if (m_nOrgFavoriteOldShell == 1)
			CMainOption::s_dwMainExtendedStyle |= MAIN_EX_ORGFAVORITEOLDSHELL;
		if (m_nRegisterAsBrowser == 1) {
			CMainOption::s_dwMainExtendedStyle |= MAIN_EX_REGISTER_AS_BROWSER;
			MtlSendOnCommand(m_wnd, ID_REGISTER_AS_BROWSER);
		}
		else {
			MtlSendOffCommand(m_wnd, ID_REGISTER_AS_BROWSER);
		}

		if (m_nLoadGlobalOffline == 1)
			CMainOption::s_dwMainExtendedStyle |= MAIN_EX_LOADGLOBALOFFLINE;
		if (m_nKillDialog == 1)
			CMainOption::s_dwMainExtendedStyle |= MAIN_EX_KILLDIALOG;

		if (m_nInheritOptions == 1)
			CMainOption::s_dwMainExtendedStyle |= MAIN_EX_INHERIT_OPTIONS;

		// update max window count
		CMainOption::s_dwMaxWindowCount = m_nMaxWindowCount;
		CMainOption::s_dwBackUpTime = m_nBackUpTime;
		m_wnd.PostMessage(WM_COMMAND, ID_BACKUPOPTION_CHANGED);
	}

	void _SetData()
	{
		m_nNewWindow = CMainOption::s_dwMainExtendedStyle & MAIN_EX_NEWWINDOW ? 1 : 0;
		m_nNoActivate = CMainOption::s_dwMainExtendedStyle & MAIN_EX_NOACTIVATE ? 1 : 0;
		m_nNoActivateNewWin = CMainOption::s_dwMainExtendedStyle & MAIN_EX_NOACTIVATE_NEWWIN ? 1 : 0;
		m_nOneInstance = CMainOption::s_dwMainExtendedStyle & MAIN_EX_ONEINSTANCE ? 1 : 0;
		m_nLimit = CMainOption::s_dwMainExtendedStyle & MAIN_EX_WINDOWLIMIT ? 1 : 0;
		m_nNoCloseDFG = CMainOption::s_dwMainExtendedStyle & MAIN_EX_NOCLOSEDFG ? 1 : 0;
		m_nNoMDI = CMainOption::s_dwMainExtendedStyle & MAIN_EX_NOMDI ? 1 : 0;
		m_nBackUp = CMainOption::s_dwMainExtendedStyle & MAIN_EX_BACKUP ? 1 : 0;
		m_nMaxWindowCount = CMainOption::s_dwMaxWindowCount;
		m_nBackUpTime = CMainOption::s_dwBackUpTime;
		m_nAddFavoriteOldShell = CMainOption::s_dwMainExtendedStyle & MAIN_EX_ADDFAVORITEOLDSHELL ? 1 : 0;
		m_nOrgFavoriteOldShell = CMainOption::s_dwMainExtendedStyle & MAIN_EX_ORGFAVORITEOLDSHELL ? 1 : 0;
		m_nLoadGlobalOffline = CMainOption::s_dwMainExtendedStyle & MAIN_EX_LOADGLOBALOFFLINE ? 1 : 0;
		m_nKillDialog = CMainOption::s_dwMainExtendedStyle & MAIN_EX_KILLDIALOG ? 1 : 0;
		m_nRegisterAsBrowser = CMainOption::s_dwMainExtendedStyle & MAIN_EX_REGISTER_AS_BROWSER ? 1 : 0;
		m_nInheritOptions = CMainOption::s_dwMainExtendedStyle & MAIN_EX_INHERIT_OPTIONS ? 1 : 0;
	}
};

// DL Control Flags
#define DLCTL_DEFAULT DLCTL_DLIMAGES | DLCTL_VIDEOS | DLCTL_BGSOUNDS

class CDLControlOption
{
public:
	static DWORD s_dwDLControlFlags;// default flags

	static void GetProfile()
	{
		CIniSection pr;
	
		pr.Open(_szIniFileName, _T("Browser"));
		if (pr.QueryValue(s_dwDLControlFlags, _T("DLControl_Flags")) != ERROR_SUCCESS)
			s_dwDLControlFlags = DLCTL_DEFAULT;

		DWORD dwMozilla = 0;
		pr.QueryValue(dwMozilla, _T("Mozilla"));
		_bMozilla = (dwMozilla == 1) ? true : false;

		DWORD dwNaviLcok = 0;
		pr.QueryValue(dwNaviLcok, _T("NavigateLock"));
		_bNaviLock = (dwNaviLcok == 1) ? true : false;

		pr.Close();
	}

	static void WriteProfile()
	{
		CIniSection pr;

		pr.Open(_szIniFileName, _T("Browser"));
		pr.SetValue(s_dwDLControlFlags, _T("DLControl_Flags"));
		pr.SetValue(_bMozilla ? 1 : 0, _T("Mozilla"));
		pr.SetValue(_bNaviLock ? 1 : 0, _T("NavigateLock"));
		pr.Close();
	}
};

__declspec(selectany) DWORD CDLControlOption::s_dwDLControlFlags = 0;

/////////////////////////////////////////////////////////////////////////////
// CDLControlPropertyPage

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

// Data members
	int m_nBGSounds, m_nVideos, m_nDLImages;
	int m_nRunActiveXCtls, m_nDLActiveXCtls, m_nScripts, m_nJava;
	int m_nMozilla;
	int m_nNaviLock;

// DDX map
	BEGIN_DDX_MAP(CDLControlPropertyPage)
		DDX_CHECK(IDC_CHECK_DLCTL_BGSOUNDS, m_nBGSounds)
		DDX_CHECK(IDC_CHECK_DLCTL_VIDEOS, m_nVideos)
		DDX_CHECK(IDC_CHECK_DLCTL_DLIMAGES, m_nDLImages)
		DDX_CHECK(IDC_CHECK_DLCTL_RUNACTIVEXCTLS, m_nRunActiveXCtls)
		DDX_CHECK(IDC_CHECK_DLCTL_DLACTIVEXCTLS, m_nDLActiveXCtls)
		DDX_CHECK(IDC_CHECK_DLCTL_SCRIPTS, m_nScripts)
		DDX_CHECK(IDC_CHECK_DLCTL_JAVA, m_nJava)
		DDX_CHECK(IDC_CHECK_MOZILLA, m_nMozilla)
		DDX_CHECK(IDC_CHECK_NAVILOCK, m_nNaviLock)
	END_DDX_MAP()

// Constructor
	CDLControlPropertyPage()
	{
		_SetData();
	}

// Overrides
	BOOL OnSetActive()
	{
		SetModified(TRUE);
		return DoDataExchange(FALSE);
	}
	BOOL OnKillActive()
	{
		return DoDataExchange(TRUE);
	}
	BOOL OnApply()
	{
		if (DoDataExchange(TRUE)) {
			_GetData();
			return TRUE;
		}
		else 
			return FALSE;
	}

// Message map and handlers
	BEGIN_MSG_MAP(CDLControlPropertyPage)
		CHAIN_MSG_MAP(CPropertyPageImpl<CDLControlPropertyPage>)
	END_MSG_MAP()

// Implementation
protected:
	void _GetData()
	{
		// update dl control flags
		CDLControlOption::s_dwDLControlFlags = 0;
	
		if (m_nBGSounds == 1)
			CDLControlOption::s_dwDLControlFlags |= DLCTL_BGSOUNDS;
		if (m_nVideos == 1)
			CDLControlOption::s_dwDLControlFlags |= DLCTL_VIDEOS;
		if (m_nDLImages == 1)
			CDLControlOption::s_dwDLControlFlags |= DLCTL_DLIMAGES;

		if (m_nRunActiveXCtls == 0)
			CDLControlOption::s_dwDLControlFlags |= DLCTL_NO_RUNACTIVEXCTLS;
		if (m_nDLActiveXCtls == 0)
			CDLControlOption::s_dwDLControlFlags |= DLCTL_NO_DLACTIVEXCTLS;
		if (m_nScripts == 0)

⌨️ 快捷键说明

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