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

📄 hhctrl.cpp

📁 中文编程语言——易语言(可视化编程
💻 CPP
📖 第 1 页 / 共 2 页
字号:

void CHHCtrl::OnDownloadComplete()
{
	NotifySys (NRS_EVENT_NOTIFY, (DWORD)&EVENT_NOTIFY (m_dwWinFormID, m_dwUnitID, 4));
}

void CHHCtrl::OnTitleChange(LPCTSTR lpszText)
{
	m_blHasTitle = TRUE;
	SetStr (m_strTitle, (LPTSTR)lpszText);
	NotifySys (NRS_EVENT_NOTIFY, (DWORD)&EVENT_NOTIFY (m_dwWinFormID, m_dwUnitID, 7));
	m_blHasTitle = FALSE;
    m_strTitle.Empty ();
}

void CHHCtrl::OnPropertyChange(LPCTSTR lpszProperty)
{
    UNUSED_ALWAYS(lpszProperty);
}

void CHHCtrl::OnNewWindow2(LPDISPATCH* ppDisp, BOOL* pfCancel)
{
	EVENT_NOTIFY event (m_dwWinFormID, m_dwUnitID, 9);
	if (NotifySys (NRS_EVENT_NOTIFY, (DWORD)&event) != 0 &&
			event.m_blHasReturnValue == TRUE &&
			event.m_nReturnValue == 0)
		*pfCancel = TRUE;
	else
		*pfCancel = FALSE;

    UNUSED_ALWAYS(ppDisp);
}

void CHHCtrl::OnVisible(BOOL fVisible)
{
    UNUSED_ALWAYS(fVisible);
}

void CHHCtrl::OnBeforeNavigate2(LPCTSTR lpszURL, DWORD nFlags,
    LPCTSTR lpszTargetFrameName, CByteArray& baPostData,
    LPCTSTR lpszHeaders, BOOL* pfCancel)
{
	m_blHasForceURL = TRUE;
	SetStr (m_strForceURL, (LPTSTR)lpszURL);

	EVENT_NOTIFY event (m_dwWinFormID, m_dwUnitID, 0);
	if (NotifySys (NRS_EVENT_NOTIFY, (DWORD)&event) != 0 &&
			event.m_blHasReturnValue == TRUE &&
			event.m_nReturnValue == 0)
		*pfCancel = TRUE;
	else
		*pfCancel = FALSE;

	m_blHasForceURL = FALSE;
	m_strForceURL.Empty ();

    UNUSED_ALWAYS(nFlags);
    UNUSED_ALWAYS(lpszTargetFrameName);
    UNUSED_ALWAYS(baPostData);
    UNUSED_ALWAYS(lpszHeaders);
}

void CHHCtrl::OnStatusTextChange(LPCTSTR pszText)
{
	SetStr (m_strStatusText, (LPTSTR)pszText);
	NotifySys (NRS_EVENT_NOTIFY, (DWORD)&EVENT_NOTIFY (m_dwWinFormID, m_dwUnitID, 6));
}

void CHHCtrl::OnNavigateComplete2(LPCTSTR strURL)
{
	m_blHasForceURL = TRUE;
	SetStr (m_strForceURL, (LPTSTR)strURL);
	NotifySys (NRS_EVENT_NOTIFY, (DWORD)&EVENT_NOTIFY (m_dwWinFormID, m_dwUnitID, 1));
	m_blHasForceURL = FALSE;
	m_strForceURL.Empty ();
}


#ifdef _DEBUG
void CHHCtrl::AssertValid() const
{
    CWnd::AssertValid();
}

void CHHCtrl::Dump(CDumpContext& dc) const
{
    CWnd::Dump(dc);
}
#endif //_DEBUG

/////////////////////////////////////////////////////////////////////////////

// !!! 此处的定义顺序绝对不可改变
static EVENT_ARG_INFO s_HtmlViewerArgInfo [] =
{
//****** 载入进度改变
	{
/*name*/	_WT("进度百分比"),
/*explain*/	_WT("参数值指示当前文档已经被载入的百分比"),
/*state*/	NULL,
	},

//****** 命令状态被改变
	{
/*name*/	_WT("命令"),
/*explain*/	_WT("参数值指示允许状态被改变的命令类型,为以下常量值之一:"
		"0: #前进; 1: #后退"),
/*state*/	NULL,
	}, {
/*name*/	_WT("是否被允许"),
/*explain*/	_WT("参数值指示该命令当前是否被允许"),
/*state*/	EAS_IS_BOOL_ARG,
	},

};

// !!! 此处的定义顺序绝对不可改变,主默认信息放在首位。
EVENT_INFO g_HtmlViewerEvent [] =
{
	{
	_WT("即将跳转"),
	_WT("在浏览器即将跳转到另一个页面之前产生此事件,"
		"在事件处理子程序中读取“地址”属性即可得知即将跳转到的地址,"
		"返回假不允许跳转,返回真或不返回值允许跳转"),
/*m_dwState*/			EV_RETURN_BOOL,
/*m_nArgCount*/			0,
/*m_pBeginArgInfo*/		NULL,
	}, {
	_WT("跳转完毕"),
	_WT("当浏览器已跳转到另一个页面之后产生此事件,"
		"在事件处理子程序中读取“地址”属性即可得知已跳转到的地址"),
/*m_dwState*/			NULL,
/*m_nArgCount*/			0,
/*m_pBeginArgInfo*/		NULL,
	}, {
	_WT("载入开始"),
	_WT("本事件在“即将跳转”事件之后触发,表示浏览器已开始载入将要显示的文档"),
/*m_dwState*/			NULL,
/*m_nArgCount*/			0,
/*m_pBeginArgInfo*/		NULL,
	}, {
	_WT("载入进度改变"),
	_WT("在浏览器载入文档的过程中,每当文档被载入一部分即触发本事件,用作通知载入进度"),
/*m_dwState*/			NULL,
/*m_nArgCount*/			1,
/*m_pBeginArgInfo*/		s_HtmlViewerArgInfo,
	}, {
	_WT("载入完毕"),
	_WT("当将要显示在浏览器内的文档被载入完毕后触发本事件"),
/*m_dwState*/			NULL,
/*m_nArgCount*/			0,
/*m_pBeginArgInfo*/		NULL,
	}, {
	_WT("已就绪"),
	_WT("当浏览器已经将所需显示的文档处理完毕后发送本事件,"
		"在事件处理子程序中读取“地址”属性即可得知已就绪文档的地址"),
/*m_dwState*/			NULL,
/*m_nArgCount*/			0,
/*m_pBeginArgInfo*/		NULL,
	}, {
	_WT("状态文本被改变"),
	_WT("当浏览器的状态条文本被改变后发送本事件,"
			"在事件处理子程序中读取“状态条文本”属性即可得知其内容"),
/*m_dwState*/			NULL,
/*m_nArgCount*/			0,
/*m_pBeginArgInfo*/		NULL,
	}, {
	_WT("标题被改变"),
	_WT("当浏览器的标题文本被改变后发送本事件,"
			"在事件处理子程序中读取“标题”属性即可得知其内容"),
/*m_dwState*/			NULL,
/*m_nArgCount*/			0,
/*m_pBeginArgInfo*/		NULL,
	}, {
	_WT("命令状态被改变"),
	_WT("当“前进”、“后退”等命令的允许状态被改变后发送此事件,"
		"用户程序应该根据状态值允许或禁止对应的按钮或菜单项。"),
/*m_dwState*/			NULL,
/*m_nArgCount*/			2,
/*m_pBeginArgInfo*/		&s_HtmlViewerArgInfo [1],
	}, {
	_WT("即将打开新窗口"),
	_WT("在浏览器即将打开新窗口浏览另一个页面之前产生此事件,"
		"事件处理子程序返回假不允许打开,返回真或不返回值允许打开"),
/*m_dwState*/			EV_RETURN_BOOL,
/*m_nArgCount*/			0,
/*m_pBeginArgInfo*/		NULL,
	},
};
INT g_HtmlViewerEventCount = sizeof (g_HtmlViewerEvent) / sizeof (g_HtmlViewerEvent [0]);

// 注意顺序不可改变!!!
UNIT_PROPERTY g_HtmlViewerProperty [] =
{
	FIXED_WIN_UNIT_PROPERTY,
	{
	/*m_szName*/			_WT("字体大小"),
	/*m_szEgName*/			_WT("FontSize"),
	/*m_szExplain*/			_WT("指定浏览页面时所使用的字体尺寸"),
	/*m_shtType*/			UD_PICK_INT,
	/*m_wState*/			NULL,
	/*m_szzPickStr*/		_WT("最小\0较小\0中等\0较大\0最大\0\0"),
	}, {
	/*m_szName*/			_WT("离线浏览"),
	/*m_szEgName*/			_WT("Offline"),
	/*m_szExplain*/			_WT("指定浏览器是否从缓存里面读取超文本页面数据"),
	/*m_shtType*/			UD_BOOL,
	/*m_wState*/			NULL,
	/*m_szzPickStr*/		NULL,
	}, {
	/*m_szName*/			_WT("静默"),
	/*m_szEgName*/			_WT("Silent"),
	/*m_szExplain*/			_WT("本属性如果为真,则浏览过程中不允许浏览器显示自己的对话框"),
	/*m_shtType*/			UD_BOOL,
	/*m_wState*/			NULL,
	/*m_szzPickStr*/		NULL,
	}, {
	/*m_szName*/			_WT("地址"),
	/*m_szEgName*/			_WT("url"),
	/*m_szExplain*/			_WT("指定欲显示的网络或本机超文本页面地址"),
	/*m_shtType*/			UD_FILE_NAME,
	/*m_wState*/			NULL,
	/*m_szzPickStr*/		_WT("请输入网页文件的名称:\0网页文件 (*.htm;*.html)|*.htm;*.html\0html\0" "0\0\0"),
	}, {
	/*m_szName*/			_WT("状态条文本"),
	/*m_szEgName*/			_WT("StatusText"),
	/*m_szExplain*/			_WT("用作在运行时提供浏览器的当前状态条文本"),
	/*m_shtType*/			UD_TEXT,
	/*m_wState*/			UW_ONLY_READ,
	/*m_szzPickStr*/		NULL,
	}, {
	/*m_szName*/			_WT("标题"),
	/*m_szEgName*/			_WT("Caption"),
	/*m_szExplain*/			_WT("用作在运行时提供浏览器的当前标题文本"),
	/*m_shtType*/			UD_TEXT,
	/*m_wState*/			UW_ONLY_READ,
	/*m_szzPickStr*/		NULL,
	},
};
INT g_HtmlViewerPropertyCount = sizeof (g_HtmlViewerProperty) / sizeof (g_HtmlViewerProperty [0]);


void CPIHtmlViewer::init ()
{
	CPropertyInfo::init ();

	m_nFontSize = 2;
    m_blOffline = FALSE;
    m_blSilent = FALSE;
	m_strURL.Empty ();
}

BOOL CPIHtmlViewer::Serialize (CArchive& ar)
{
	if (CPropertyInfo::Serialize (ar) == FALSE)
		return FALSE;

	TRY
	{
		if (ar.IsLoading () == TRUE)
		{
			DWORD dwUnitDataVer;
			ar >> dwUnitDataVer;
			if (dwUnitDataVer > CUR_UNIT_VER)
				return FALSE;
			ar >> m_nFontSize >> m_blOffline >> m_blSilent;
		}
		else
		{
			ar << (DWORD)CUR_UNIT_VER;
			ar << m_nFontSize << m_blOffline << m_blSilent;
		}

		SerializeCString (m_strURL, ar);
		return TRUE;
	}
	END_TRY

	return FALSE;
}

/////////////////////////////////////////////////////////////////////////////

HUNIT WINAPI Create_HtmlViewer (LPBYTE pAllData, INT nAllDataSize,
		DWORD dwStyle, HWND hParentWnd, UINT uID, HMENU hMenu, INT x, INT y, INT cx, INT cy,
		DWORD dwWinFormID, DWORD dwUnitID, HWND hDesignWnd, BOOL blInDesignMode)
{
	CHHCtrl* pUnit = new CHHCtrl;

	if (pUnit->m_info.LoadData (pAllData, nAllDataSize) == FALSE)
	{
		delete pUnit;
		return NULL;
	}

	pUnit->m_dwWinFormID = dwWinFormID;
	pUnit->m_dwUnitID = dwUnitID;
	pUnit->m_blInDesignMode = blInDesignMode;

	if (pUnit->Create (hParentWnd, dwStyle | WS_CHILD | WS_CLIPSIBLINGS,
			uID, x, y, cx, cy))
	{
		pUnit->SetOffline (pUnit->m_info.m_blOffline);
		pUnit->SetSilent (pUnit->m_info.m_blSilent);

		COleVariant vaZoomFactor ((LONG)max (0, min (4, pUnit->m_info.m_nFontSize)));
		pUnit->ExecWB (OLECMDID_ZOOM, OLECMDEXECOPT_DONTPROMPTUSER, &vaZoomFactor, NULL);

		if (!pUnit->m_info.m_strURL.IsEmpty ())
			pUnit->Navigate (pUnit->m_info.m_strURL);
		return (HUNIT)pUnit;
	}
	else
		return NULL;
}

BOOL WINAPI NotifyPropertyChanged_HtmlViewer (HUNIT hUnit, INT nPropertyIndex,
											  PUNIT_PROPERTY_VALUE pPropertyVaule,
											  LPTSTR* ppszTipText)
{
	ASSERT (hUnit != NULL);
	if (hUnit == NULL)  return FALSE;
	CHHCtrl* pUnit = (CHHCtrl*)hUnit;
	ASSERT (pUnit->GetSafeHwnd () != NULL);

	if (ppszTipText != NULL)
		*ppszTipText = NULL;

// 注意此处的属性索引必须与属性表完全一致。
	switch (nPropertyIndex)
	{
	case 0:
		{
			pUnit->m_info.m_nFontSize = max (0, min (4, pPropertyVaule->m_int));
			COleVariant vaZoomFactor ((LONG)pUnit->m_info.m_nFontSize);
			pUnit->ExecWB (OLECMDID_ZOOM, OLECMDEXECOPT_DONTPROMPTUSER, &vaZoomFactor, NULL);
		}
		break;
	case 1:
		pUnit->SetOffline (pUnit->m_info.m_blOffline = pPropertyVaule->m_bool);
		break;
	case 2:
		pUnit->SetSilent (pUnit->m_info.m_blSilent = pPropertyVaule->m_bool);
		break;
	case 3:
		SetStr (pUnit->m_info.m_strURL, pPropertyVaule->m_szText);
		pUnit->Navigate (pUnit->m_info.m_strURL);
		break;
	case 4:
		break;
	case 5:
		break;
    default:
        ASSERT (FALSE);
        break;
	}

	return FALSE;
}

// !! 对于运行时可能被用户操作改变(不考虑直接调用API函数)的属性,在运行时必须取其现行实际值。
BOOL WINAPI GetPropertyData_HtmlViewer (HUNIT hUnit, INT nPropertyIndex,
										PUNIT_PROPERTY_VALUE pPropertyVaule)
{
	ASSERT (hUnit != NULL);
	if (hUnit == NULL)  return FALSE;
	CHHCtrl* pUnit = (CHHCtrl*)hUnit;
	ASSERT (pUnit->GetSafeHwnd () != NULL);

// 注意此处的属性索引必须与属性表完全一致。
	switch (nPropertyIndex)
	{
	case 0:
		pPropertyVaule->m_int = pUnit->m_info.m_nFontSize;
		break;
	case 1:
		pPropertyVaule->m_bool = pUnit->m_blInDesignMode ?
				pUnit->m_info.m_blOffline : pUnit->GetOffline ();
		break;
	case 2:
		pPropertyVaule->m_bool = pUnit->m_blInDesignMode ?
				pUnit->m_info.m_blSilent : pUnit->GetSilent ();
		break;
	case 3:
		if (pUnit->m_blInDesignMode == FALSE)
		{
			pUnit->m_info.m_strURL = pUnit->m_blHasForceURL ?
					pUnit->m_strForceURL : pUnit->GetLocationURL ();
		}
		pPropertyVaule->m_szText = (LPTSTR)(LPCTSTR)pUnit->m_info.m_strURL;
		break;
	case 4:
		pPropertyVaule->m_szText = (LPTSTR)(LPCTSTR)pUnit->m_strStatusText;
		break;
	case 5:
		if (pUnit->m_blHasTitle == FALSE)
			pUnit->m_strTitle = pUnit->GetLocationName ();
		pPropertyVaule->m_szText = (LPTSTR)(LPCTSTR)pUnit->m_strTitle;
		break;
	default:
		ASSERT (FALSE);
		return FALSE;
	}

	return TRUE;
}

HGLOBAL WINAPI GetAllPropertyData_HtmlViewer (HUNIT hUnit)
{
	ASSERT (hUnit != NULL);
	return ((CHHCtrl*)hUnit)->m_info.SaveData ();
}

PFN_INTERFACE WINAPI GetInterface_HtmlViewer (INT nInterfaceNO)
{
	return nInterfaceNO == ITF_CREATE_UNIT ? (PFN_INTERFACE)Create_HtmlViewer :
			nInterfaceNO == ITF_NOTIFY_PROPERTY_CHANGED ? (PFN_INTERFACE)NotifyPropertyChanged_HtmlViewer :
			nInterfaceNO == ITF_GET_ALL_PROPERTY_DATA ? (PFN_INTERFACE)GetAllPropertyData_HtmlViewer :
			nInterfaceNO == ITF_GET_PROPERTY_DATA ? (PFN_INTERFACE)GetPropertyData_HtmlViewer :
			NULL;
}

⌨️ 快捷键说明

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