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

📄 mainfrm.h

📁 一个使用wtl写的完整的多窗口浏览器
💻 H
📖 第 1 页 / 共 4 页
字号:
		return 0;
	}
	LRESULT OnFileExit(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/)
	{
		PostMessage(WM_CLOSE);
		return 0;
	}

	void OnEditCut(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/)
	{	
		CEdit edit = m_AddressBar.GetEditCtrl();
		if (::GetFocus() != edit) {
			SetMsgHandled(FALSE);
			return;
		}

		edit.Cut();
	}

	void OnEditCopy(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/)
	{
		CEdit edit = m_AddressBar.GetEditCtrl();
		if (::GetFocus() != edit) {
			SetMsgHandled(FALSE);
			return;
		}

		edit.Copy();
	}

	void OnEditPaste(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/)
	{
		CEdit edit = m_AddressBar.GetEditCtrl();
		if (::GetFocus() != edit) {
			SetMsgHandled(FALSE);
			return;
		}

		edit.Paste();
	}

	void OnEditSelectAll(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/)
	{
		CEdit edit = m_AddressBar.GetEditCtrl();
		if (::GetFocus() != edit) {
			SetMsgHandled(FALSE);
			return;
		}

		edit.SetSel(0, -1);
	}

	LRESULT OnViewToolBar(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/)
	{
		// It sucks, band index is dynamic.
		// ::SendMessage(m_hWndToolBar, RB_SHOWBAND, 0, bNew);	// toolbar is band #0
		MtlToggleBandVisible(m_hWndToolBar, ATL_IDW_TOOLBAR);
		UpdateLayout();
		return 0;
	}
	LRESULT OnViewAddressBar(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/)
	{
		MtlToggleBandVisible(m_hWndToolBar, IDC_ADDRESSBAR);
		UpdateLayout();
		return 0;
	}
	LRESULT OnViewLinkBar(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/)
	{
		MtlToggleBandVisible(m_hWndToolBar, IDC_LINKBAR);
		UpdateLayout();
		return 0;
	}

	LRESULT OnViewGoButton(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/)
	{
		if (_check_flag(ABR_EX_GOBTNVISIBLE, m_AddressBar.GetAddressBarExtendedStyle()))
			m_AddressBar.ModifyAddressBarExtendedStyle(ABR_EX_GOBTNVISIBLE, 0);
		else
			m_AddressBar.ModifyAddressBarExtendedStyle(0, ABR_EX_GOBTNVISIBLE);

		return 0;
	}
	LRESULT OnViewTabBar(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/)
	{
		MtlToggleBandVisible(m_hWndToolBar, IDC_MDITAB);
		UpdateLayout();
		return 0;
	}
	
	LRESULT OnViewTabBarMulti(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/)
	{
		DWORD dwOldStyle = m_MDITab.GetMDITabExtendedStyle();
		if (dwOldStyle & MTB_EX_MULTILINE)
			dwOldStyle &= ~MTB_EX_MULTILINE;
		else
			dwOldStyle |= MTB_EX_MULTILINE;

		m_MDITab.SetMDITabExtendedStyle(dwOldStyle);
		return 0;
	}

	LRESULT OnViewAddBarDropDown(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/)
	{
		if (m_AddressBar.GetDroppedStateEx())
			m_AddressBar.ShowDropDown(FALSE);
		else
			m_AddressBar.ShowDropDown(TRUE);

		return 0;
	}

	LRESULT OnViewStatusBar(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/)
	{
		BOOL bNew = !::IsWindowVisible(m_hWndStatusBar);
		m_bStatusBarVisibleUnlessFullScreen = bNew;// save
		::ShowWindow(m_hWndStatusBar, bNew ? SW_SHOWNOACTIVATE : SW_HIDE);
		UpdateLayout();
		return 0;
	}
	LRESULT OnViewToolBarCust(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/)
	{
		m_ToolBar.StdToolBar_Customize();
		return 0;
	}

	void OnFavoriteOrganize(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/)
	{
		bool bOldShell = _check_flag(MAIN_EX_ORGFAVORITEOLDSHELL, CMainOption::s_dwMainExtendedStyle);
//		CString strPath = DonutGetFavoritesFolder();
//		MtlOrganizeFavorite(m_hWnd, bOldShell, strPath);
		MtlOrganizeFavorite(m_hWnd, bOldShell, DonutGetFavoritesFolder());
	}

	void OnBackUpOptionChanged(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/)
	{
		if (m_nBackUpTimerID != 0) {
			KillTimer(m_nBackUpTimerID);
			m_nBackUpTimerID = 0;
		}

		if (CMainOption::s_dwMainExtendedStyle & MAIN_EX_BACKUP)
			m_nBackUpTimerID = SetTimer(1, 1000*60*CMainOption::s_dwBackUpTime);
	}

	void OnTimer(UINT nIDEvent, TIMERPROC*)
	{
		if (m_nBackUpTimerID != nIDEvent) {
			SetMsgHandled(FALSE);
			return;
		}

		_SaveGroupOption(CStartUpOption::GetDefaultDFGFilePath());
	}

	void OnViewOptionDonut(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/)
	{
		CMainPropertyPage pageMain(m_hWnd);
		CDLControlPropertyPage pageDLC;
		CMDITabPropertyPage pageTab(&m_MDITab);
		CDonutAddressBarPropertyPage pageAddress(m_AddressBar);
		CDonutFavoritesMenuPropertyPage pageFav;
		CFileNewPropertyPage pageFileNew;
		CStartUpPropertyPage pageStartUp;

		CString strURL, strTitle;
		HWND hWndActive = MDIGetActive();
		if (hWndActive) {
			CWebBrowser2 browser = DonutGetIWebBrowser2(hWndActive);
			if (browser.m_spBrowser != NULL) {
				strURL = browser.GetLocationURL();
				strTitle = MtlGetWindowText(hWndActive);// pChild->get_LocationName();
			}
		}

		CIgnoredURLsPropertyPage pageURLs(strURL);
		CCloseTitlesPropertyPage pageTitles(strTitle);
		CDonutExecutablePropertyPage pageExe;
		CDonutConfirmPropertyPage pageCnf;

		CCenterPropertySheet sheet(_T("Donut偺僆僾僔儑儞"));
		sheet.AddPage(pageMain);
		sheet.AddPage(pageTab);
		sheet.AddPage(pageAddress);
		sheet.AddPage(pageFileNew);
		sheet.AddPage(pageStartUp);
		sheet.AddPage(pageDLC);
		sheet.AddPage(pageURLs);
		sheet.AddPage(pageTitles);
		sheet.AddPage(pageFav);
		sheet.AddPage(pageExe);
		sheet.AddPage(pageCnf);

		sheet.DoModal();
//			m_LinkBar.m_ExpMenu.SetStyle(m_FavoriteMenu.GetStyle());
//		}
	}

	void OnViewOption(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/)
	{
		if (MDIGetActive() == NULL)
			MtlShowInternetOptions();
	}

	LRESULT OnWindowCloseAll(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/)
	{
		if (!CDonutConfirmOption::OnCloseAll(m_hWnd))
			return 0;

		CWaitCursor cur;
		CLockRedrawMDIClient lock(m_hWndMDIClient);
		CLockRedraw lock2(m_MDITab);
		MtlCloseAllMDIChildren(m_hWndMDIClient);
		return 0;
	}

	bool _IsFullScreen()
	{
		if (GetStyle() & WS_CAPTION)
			return false;
		else
			return true;
	}

	struct _Function_FullScreen
	{
		CMainFrame& _wndMain;
		_Function_FullScreen(CMainFrame& wndMain) : _wndMain(wndMain) { }
		bool operator()()
		{
			if (CMainOption::s_dwMainExtendedStyle & MAIN_EX_FULLSCREEN) {
				_wndMain._FullScreen(TRUE);
				return true;
			}

			return false;
		}
	};

	void _ShowBandsFullScreen(BOOL bOn, bool bInit = false)
	{
		static BOOL bOldVisibleToolBar, bOldVisibleAddressBar,
			bOldVisibleGoButton, bOldVisibleMDITab, bOldVisibleLinkBar;

		if (bInit) {
 			bOldVisibleToolBar = MtlIsBandVisible(m_hWndToolBar, ATL_IDW_TOOLBAR);
			bOldVisibleAddressBar = MtlIsBandVisible(m_hWndToolBar, IDC_ADDRESSBAR);
//			bOldVisibleMDITab = MtlIsBandVisible(m_hWndToolBar, IDC_MDITAB);
			bOldVisibleLinkBar = MtlIsBandVisible(m_hWndToolBar, IDC_LINKBAR);
			return;
		}

		if (bOn) {// remove caption
			// save prev visible
 			bOldVisibleToolBar = MtlIsBandVisible(m_hWndToolBar, ATL_IDW_TOOLBAR);
			bOldVisibleAddressBar = MtlIsBandVisible(m_hWndToolBar, IDC_ADDRESSBAR);
//			bOldVisibleMDITab = MtlIsBandVisible(m_hWndToolBar, IDC_MDITAB);
			bOldVisibleLinkBar = MtlIsBandVisible(m_hWndToolBar, IDC_LINKBAR);

			MtlShowBand(m_hWndToolBar, ATL_IDW_COMMAND_BAR, FALSE);// hide it.
			MtlShowBand(m_hWndToolBar, ATL_IDW_TOOLBAR, TRUE);// show it.
			MtlShowBand(m_hWndToolBar, IDC_ADDRESSBAR, FALSE);
//			MtlShowBand(m_hWndToolBar, IDC_MDITAB, TRUE);// show it
			MtlShowBand(m_hWndToolBar, IDC_LINKBAR, FALSE);
			::ShowWindow(m_hWndStatusBar, SW_HIDE);// hide it
		}
		else {
			// restore prev visible
			MtlShowBand(m_hWndToolBar, ATL_IDW_COMMAND_BAR, TRUE);// show it.
			MtlShowBand(m_hWndToolBar, ATL_IDW_TOOLBAR, bOldVisibleToolBar);// show it.
			MtlShowBand(m_hWndToolBar, IDC_ADDRESSBAR, bOldVisibleAddressBar);
//			MtlShowBand(m_hWndToolBar, IDC_MDITAB, bOldVisibleMDITab);// show it
			MtlShowBand(m_hWndToolBar, IDC_LINKBAR, bOldVisibleLinkBar);
			::ShowWindow(m_hWndStatusBar, m_bStatusBarVisibleUnlessFullScreen ? SW_SHOWNOACTIVATE : SW_HIDE);
		}
	}

	void _FullScreen(BOOL bOn)
	{
		static BOOL bOldMaximized;

		_ShowBandsFullScreen(bOn);

		if (bOn) {// remove caption
			// save prev visible
			CWindowPlacement wndpl;
			GetWindowPlacement(&wndpl);
			bOldMaximized = (wndpl.showCmd == SW_SHOWMAXIMIZED);

			ModifyStyle(WS_CAPTION, 0);

			m_mcToolBar.m_bVisible = true;
			if (!bOldMaximized)
				ShowWindow(SW_MAXIMIZE);
			else {
				SetWindowPos(NULL, 0, 0, 0, 0,
					SWP_NOSIZE|SWP_NOMOVE|SWP_NOACTIVATE|SWP_NOZORDER|SWP_FRAMECHANGED);
			}
		}
		else {
			m_mcToolBar.m_bVisible = false;
			// restore prev visible
			ModifyStyle(0, WS_CAPTION);

			if (!bOldMaximized)
				ShowWindow(SW_RESTORE);
			else {
				SetWindowPos(NULL, 0, 0, 0, 0,
					SWP_NOSIZE|SWP_NOMOVE|SWP_NOACTIVATE|SWP_NOZORDER|SWP_FRAMECHANGED);
			}
		}
	}

	void OnViewFullScreen(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/)
	{
		if (GetStyle() & WS_CAPTION) {// remove caption
			_FullScreen(TRUE);
		}
		else {
			_FullScreen(FALSE);
		}

//		SetWindowPos(NULL, 0, 0, 0, 0,
//			SWP_NOSIZE|SWP_NOMOVE|SWP_NOACTIVATE|SWP_NOZORDER|SWP_FRAMECHANGED);
	}

	void OnFavoriteGroupSave(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/)
	{
		if (MDIGetActive() == NULL)
			return;

		TCHAR szOldPath[MAX_PATH];// save current directory
		::GetCurrentDirectory(MAX_PATH, szOldPath);

		const TCHAR szFilter[] = _T("Donut Favorite Group僼傽僀儖(*.dfg)\0*.dfg\0\0");

		::SetCurrentDirectory(DonutGetFavoriteGroupFolder());

		CFileDialog fileDlg(FALSE, _T("dfg"), NULL, OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, szFilter);
		fileDlg.m_ofn.lpstrInitialDir = DonutGetFavoriteGroupFolder();
		fileDlg.m_ofn.lpstrTitle = _T("Save As Favorite Group");
		if (fileDlg.DoModal() == IDOK) {
			_SaveGroupOption(fileDlg.m_szFileName);
		}

		// restore current directory
		::SetCurrentDirectory(szOldPath);
	}

	void OnFavoriteGroupOrganize(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/)
	{
		::ShellExecute(m_hWnd, NULL, DonutGetFavoriteGroupFolder(), NULL, NULL, SW_SHOWNORMAL);
	}

	void OnViewRefreshAll(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/)
	{
		MtlForEachMDIChild(m_hWndMDIClient, CPostCommand(ID_VIEW_REFRESH));
	}

	void OnViewStopAll(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/)
	{
		MtlForEachMDIChild(m_hWndMDIClient, CPostCommand(ID_VIEW_STOP));
	}

	void OnSetFocusAddressBar(WORD /*wNotifyCode*/, WORD /*wID*/, HWND hWndCtl)
	{
		::SetFocus(m_AddressBar.GetEditCtrl());
	}

	void OnTabLeft(WORD /*wNotifyCode*/, WORD /*wID*/, HWND hWndCtl)
	{
		m_MDITab.LeftTab();
	}

	void OnTabRight(WORD /*wNotifyCode*/, WORD /*wID*/, HWND hWndCtl)
	{
		m_MDITab.RightTab();
	}

	void __AddToAddressBoxUnique(const CString& strURL)
	{
		COMBOBOXEXITEM item;
		item.mask = CBEIF_TEXT;
		item.iItem = 0;
		item.pszText = (LPTSTR)(LPCTSTR)strURL;

		// search the same string
		int nCount = m_AddressBar.GetCount();
		for (int n = 0; n < nCount; ++n) {
			CString str;
			MtlGetLBTextFixed(m_AddressBar, n, str);
			if (strURL == str) {
				m_AddressBar.DeleteItem(n);
				break;
			}
		}

		m_AddressBar.InsertItem(&item);
	}
	
	void __MoveToTopAddressBox(const CString& strURL)
	{
		COMBOBOXEXITEM item;
		item.mask = CBEIF_TEXT;
		item.iItem = 0;
		item.pszText = (LPTSTR)(LPCTSTR)strURL;
		
		// search the same string
		int nCount = m_AddressBar.GetCount();
		for (int n = 0; n < nCount; ++n) {
			CString str;
			MtlGetLBTextFixed(m_AddressBar, n, str);
			if (strURL == str) {
				m_AddressBar.DeleteItem(n);
				m_AddressBar.InsertItem(&item);
				break;

⌨️ 快捷键说明

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