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

📄 donut.h

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

#pragma once

#define WM_USER_OPENFILES WM_USER + 29
#define MSG_WM_USER_OPENFILES(func) \
	if (uMsg == WM_USER_OPENFILES) \
	{ \
		SetMsgHandled(TRUE); \
		func((CSimpleArray<CString>*)wParam, (DWORD)lParam); \
		lResult = 0; \
		if(IsMsgHandled()) \
			return TRUE; \
	}

#define WM_USER_OPENFILE WM_USER + 32
#define MSG_WM_USER_OPENFILE(func) \
	if (uMsg == WM_USER_OPENFILE) \
	{ \
		SetMsgHandled(TRUE); \
		lResult = (LRESULT)func((LPCTSTR)wParam, (DWORD)lParam); \
		if(IsMsgHandled()) \
			return TRUE; \
	}

// WM_USER_GO's lParam flags
#define D_OPENFILE_ACTIVATE		0x00000001
#define D_OPENFILE_NOCREATE		0x00000002
#define D_OPENFILE_NOSETFOCUS	0x00000004

#define WM_USER_GET_IWEBBROWSER WM_USER + 30
#define MSG_WM_USER_GET_IWEBBROWSER() \
	if (uMsg == WM_USER_GET_IWEBBROWSER) \
	{ \
		SetMsgHandled(TRUE); \
		lResult = (LRESULT)m_spBrowser.p; \
		if(IsMsgHandled()) \
			return TRUE; \
	}

#define MSG_WM_USER_GET_ACTIVE_IWEBBROWSER() \
	if (uMsg == WM_USER_GET_IWEBBROWSER) \
	{ \
		SetMsgHandled(TRUE); \
		HWND hWnd = MDIGetActive(); \
		if (hWnd != NULL) \
			lResult = (LRESULT)DonutGetIWebBrowser2(hWnd); \
		else \
			lResult = NULL; \
		if(IsMsgHandled()) \
			return TRUE; \
	}

#define WM_USER_INITIAL_UPDATE WM_USER + 31
#define MSG_WM_USER_INITIAL_UPDATE(func) \
	if (uMsg == WM_USER_INITIAL_UPDATE) \
	{ \
		SetMsgHandled(TRUE); \
		func((IWebBrowser2*)wParam, (IAxWinHostWindow*)lParam); \
		lResult = 0; \
		if(IsMsgHandled()) \
			return TRUE; \
	}

#define WM_USER_GET_ACTIVE_WINDOW WM_USER + 35
#define MSG_WM_USER_GET_ACTIVE_WINDOW() \
	if (uMsg == WM_USER_GET_ACTIVE_WINDOW) \
	{ \
		SetMsgHandled(TRUE); \
		lResult = (LRESULT)MDIGetActive(); \
		if(IsMsgHandled()) \
			return TRUE; \
	}

#define WM_USER_BROWSER_CAN_SETFOCUS WM_USER + 36
#define MSG_WM_USER_BROWSER_CAN_SETFOCUS(func) \
	if (uMsg == WM_USER_BROWSER_CAN_SETFOCUS) \
	{ \
		SetMsgHandled(TRUE); \
		lResult = (LRESULT)func(); \
		if(IsMsgHandled()) \
			return TRUE; \
	}

#define WM_USER_GET_DLCONTROL_FLAGS WM_USER + 40
#define MSG_WM_USER_GET_DLCONTROL_FLAGS(func) \
	if (uMsg == WM_USER_GET_DLCONTROL_FLAGS) \
	{ \
		SetMsgHandled(TRUE); \
		lResult = (LRESULT)func((BOOL)wParam); \
		if(IsMsgHandled()) \
			return TRUE; \
	}

inline IWebBrowser2* DonutGetIWebBrowser2(HWND hWnd)
{
	return (IWebBrowser2*)::SendMessage(hWnd, WM_USER_GET_IWEBBROWSER, 0, 0);
}

inline HWND DonutGetActiveWindow(HWND hWnd)
{
	return (HWND)::SendMessage(hWnd, WM_USER_GET_ACTIVE_WINDOW, 0, 0);
}

inline HWND DonutOpenFile(HWND hWnd, const CString& strFile, DWORD dwOpenFlag = 0)
{
	CWindow wnd(hWnd);
	return (HWND)::SendMessage(wnd.GetTopLevelParent(), WM_USER_OPENFILE,
				(WPARAM)(LPCTSTR)strFile, (LPARAM)dwOpenFlag);
}

inline bool DonutBrowserCanSetFocus(HWND hWnd)
{
	CWindow wnd(hWnd);
	BOOL b = (BOOL)::SendMessage(wnd.GetTopLevelParent(), WM_USER_BROWSER_CAN_SETFOCUS, 0L, 0L);
	return b == TRUE ? true : false;
}

inline void DonutToggleOpenFlag(DWORD &dwFlag)
{
	if (::GetAsyncKeyState(VK_CONTROL) < 0 || ::GetAsyncKeyState(VK_SHIFT) < 0) {
		if (_check_flag(D_OPENFILE_NOCREATE, dwFlag))
			dwFlag &= ~D_OPENFILE_NOCREATE;
		else
			dwFlag |= D_OPENFILE_NOCREATE;
	}
}

inline DWORD DonutGetStdOpenFlag()
{
	DWORD dwFlag = 0;
	if (!_check_flag(MAIN_EX_NEWWINDOW, CMainOption::s_dwMainExtendedStyle))
		dwFlag |= D_OPENFILE_NOCREATE;

	if (!_check_flag(MAIN_EX_NOACTIVATE, CMainOption::s_dwMainExtendedStyle))
		dwFlag |= D_OPENFILE_ACTIVATE;


	DonutToggleOpenFlag(dwFlag);

	return dwFlag;
}

inline DWORD DonutGetStdOpenFlagNoToggle()
{
	DWORD dwFlag = 0;
	if (!_check_flag(MAIN_EX_NEWWINDOW, CMainOption::s_dwMainExtendedStyle))
		dwFlag |= D_OPENFILE_NOCREATE;

	if (!_check_flag(MAIN_EX_NOACTIVATE, CMainOption::s_dwMainExtendedStyle))
		dwFlag |= D_OPENFILE_ACTIVATE;

	return dwFlag;
}

inline DWORD DonutGetStdOpenActivateFlag()
{
	DWORD dwFlag = 0;
	if (!_check_flag(MAIN_EX_NOACTIVATE, CMainOption::s_dwMainExtendedStyle))
		dwFlag |= D_OPENFILE_ACTIVATE;

	return dwFlag;
}

inline DWORD DonutGetDLContrlFlags(HWND hWnd, bool bFromView)
{
	return (DWORD)::SendMessage(hWnd, WM_USER_GET_DLCONTROL_FLAGS, (bFromView == true) ? TRUE : FALSE, 0L);
}

//#ifdef _DEBUG
#define DEBUG_CHECK_FOCUS_COMMAND_ID_HANDLER_EX() \
	if (uMsg == WM_COMMAND && ID_DEBUG_CHECK_FOCUS == LOWORD(wParam)) \
	{ \
		SetMsgHandled(TRUE); \
		MessageBox(MtlGetWindowClassName(::GetFocus()), _T("Focus Checker"), MB_OK); \
		ATLTRACE(_T("Donut::Current Focus = (%x,%s)\n"), ::GetFocus(), MtlGetWindowClassName(::GetFocus())); \
		lResult = 0; \
		if(IsMsgHandled()) \
			return TRUE; \
	}
//#else
//#define	DEBUG_CHECK_FOCUS_COMMAND_ID_HANDLER_EX()
//#endif

⌨️ 快捷键说明

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