📄 htmlview.cpp
字号:
/*
版权声明:
本文件版权为易语言作者吴涛所有,仅授权给第三方用作开发易语言支持库,禁止用于其他任何场合。
*/
#include "stdafx.h"
#include "resource.h"
#include "HtmlView.h"
#include "lib.h"
#include "hhctrl.h"
#include "fnshare.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CHtmlViewApp
BEGIN_MESSAGE_MAP(CHtmlViewApp, CWinApp)
//{{AFX_MSG_MAP(CHtmlViewApp)
// NOTE - the ClassWizard will add and remove mapping macros here.
// DO NOT EDIT what you see in these blocks of generated code!
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CHtmlViewApp construction
CHtmlViewApp::CHtmlViewApp()
{
m_blComInited = FALSE;
}
/////////////////////////////////////////////////////////////////////////////
// The one and only CHtmlViewApp object
CHtmlViewApp theApp;
/////////////////////////////////////////////////////////////////////////////
INT g_nLastNotifyResult;
PFN_NOTIFY_SYS g_fnNotifySys = NULL;
INT WINAPI NotifySys (INT nMsg, DWORD dwParam1, DWORD dwParam2)
{
ASSERT (g_fnNotifySys != NULL);
if (g_fnNotifySys != NULL)
return g_nLastNotifyResult = g_fnNotifySys (nMsg, dwParam1, dwParam2);
else
return g_nLastNotifyResult = 0;
}
#include "fnshare.cpp"
/////////////////////////////////////////////////////////////////////////////
INT s_nHtmlViewerElementCmdIndex [] =
{
0, 1, 2, 3, 4
};
extern UNIT_PROPERTY g_HtmlViewerProperty [];
extern INT g_HtmlViewerPropertyCount;
extern EVENT_INFO g_HtmlViewerEvent [];
extern INT g_HtmlViewerEventCount;
// 下面的定义顺序绝对不可改动。
static LIB_DATA_TYPE_INFO s_DataType[] =
{
{
/*m_szName*/ _WT("超文本浏览框"),
/*m_szEgName*/ _WT("HtmlViewer"),
/*m_szExplain*/ _WT("提供对HTML页面的浏览支持"),
/*m_nCmdCount*/ sizeof (s_nHtmlViewerElementCmdIndex) / sizeof (s_nHtmlViewerElementCmdIndex [0]),
/*m_pnCmdsIndex*/ s_nHtmlViewerElementCmdIndex,
/*m_dwState*/ LDT_WIN_UNIT,
/*m_dwUnitBmpID*/ IDB_HTMLVIEWER_BITMAP,
/*m_nEventCount*/ g_HtmlViewerEventCount,
/*m_pEventBegin*/ g_HtmlViewerEvent,
/*m_nPropertyCount*/ g_HtmlViewerPropertyCount,
/*m_pPropertyBegin*/ g_HtmlViewerProperty,
/*m_pfnGetInterface*/ GetInterface_HtmlViewer,
/*m_nElementCount*/ 0,
/*m_pElementBegin*/ NULL,
},
};
///////////////////////////////////
//*** 命令定义信息:
ARG_INFO s_ArgInfo[] =
{
//****** 执行命令 ** 0
{
/*name*/ _WT("欲执行的命令"),
/*explain*/ _WT("指定欲执行命令的类型,为以下常量值之一: "
"0: #前进; "
"1: #后退; "
"2: #到首页; "
"3: #到搜索页; "
"4: #刷新; "
"5: #停止; "
"6: #另存为; "
"7: #打印; "
"8: #打印预览; "
"9: #页面设置"),
/*bmp inx*/ 0,
/*bmp num*/ 0,
/*type*/ SDT_INT,
/*default*/ 0,
/*state*/ NULL,
},
//****** 跳转 ** 1
{
/*name*/ _WT("欲打开文档地址"),
/*explain*/ _WT("指定文档位于互联网或本机上的地址"),
/*bmp inx*/ 0,
/*bmp num*/ 0,
/*type*/ SDT_TEXT,
/*default*/ 0,
/*state*/ NULL,
}, {
/*name*/ _WT("CHM文件名称"),
/*explain*/ _WT("如果欲打开文档处于 .CHM 文件内,本参数提供该 CHM 文件的名称。"
"如果本参数被省略,默认值为空文本"),
/*bmp inx*/ 0,
/*bmp num*/ 0,
/*type*/ SDT_TEXT,
/*default*/ 0,
/*state*/ AS_DEFAULT_VALUE_IS_EMPTY,
}, {
/*name*/ _WT("目标窗口名称"),
/*explain*/ _WT("指定文档是否在单独窗口中打开,相同的名称指定相同的窗口。"
"如果欲在浏览框内部打开,提供空文本参数值即可。"
"如果本参数被省略,默认值为空文本"),
/*bmp inx*/ 0,
/*bmp num*/ 0,
/*type*/ SDT_TEXT,
/*default*/ 0,
/*state*/ AS_DEFAULT_VALUE_IS_EMPTY,
}
};
static CMD_INFO s_CmdInfo[] =
{
/////////////////////////////////// 超文本浏览框
//****** 执行命令(成员) ** 0
{
/*ccname*/ _WT("执行命令"),
/*egname*/ _WT("Execute"),
/*explain*/ _WT("执行指定的浏览器命令"),
/*category*/-1,
/*state*/ NULL,
/*ret*/ _SDT_NULL,
/*reserved*/0,
/*level*/ LVL_SIMPLE,
/*bmp inx*/ 0,
/*bmp num*/ 0,
/*ArgCount*/1,
/*arg lp*/ s_ArgInfo,
},
//****** 跳转(成员) ** 1
{
/*ccname*/ _WT("跳转"),
/*egname*/ _WT("Navigate"),
/*explain*/ _WT("打开互联网或者本机上指定位置处的文档"),
/*category*/-1,
/*state*/ NULL,
/*ret*/ _SDT_NULL,
/*reserved*/0,
/*level*/ LVL_SIMPLE,
/*bmp inx*/ 0,
/*bmp num*/ 0,
/*ArgCount*/3,
/*arg lp*/ &s_ArgInfo [1],
},
//****** 取文档类型(成员) ** 2
{
/*ccname*/ _WT("取文档类型"),
/*egname*/ _WT("GetType"),
/*explain*/ _WT("返回超文本浏览框中现行文档的类型文本"),
/*category*/-1,
/*state*/ NULL,
/*ret*/ SDT_TEXT,
/*reserved*/0,
/*level*/ LVL_SIMPLE,
/*bmp inx*/ 0,
/*bmp num*/ 0,
/*ArgCount*/0,
/*arg lp*/ NULL,
},
//****** 是否正在下载(成员) ** 3
{
/*ccname*/ _WT("是否正在下载"),
/*egname*/ _WT("GetBusy"),
/*explain*/ _WT("如果当前正在下载文档或执行页面跳转,返回真,否则返回假"),
/*category*/-1,
/*state*/ NULL,
/*ret*/ SDT_BOOL,
/*reserved*/0,
/*level*/ LVL_SIMPLE,
/*bmp inx*/ 0,
/*bmp num*/ 0,
/*ArgCount*/0,
/*arg lp*/ NULL,
},
//****** 是否就绪(成员) ** 4
{
/*ccname*/ _WT("是否就绪"),
/*egname*/ _WT("IsReady"),
/*explain*/ _WT("如果浏览框当前已经准备就绪,返回真,否则返回假"),
/*category*/-1,
/*state*/ NULL,
/*ret*/ SDT_BOOL,
/*reserved*/0,
/*level*/ LVL_SIMPLE,
/*bmp inx*/ 0,
/*bmp num*/ 0,
/*ArgCount*/0,
/*arg lp*/ NULL,
},
};
///////////////////////////////////
void fnExecute (PMDATA_INF pRetData, INT nArgCount, PMDATA_INF pArgInf)
{
CHHCtrl* pUnit = (CHHCtrl*)GetWndPtr (pArgInf);
switch (pArgInf [1].m_int)
{
case 0:
pUnit->GoForward ();
break;
case 1:
pUnit->GoBack ();
break;
case 2:
pUnit->GoHome ();
break;
case 3:
pUnit->GoSearch ();
break;
case 4:
pUnit->Refresh ();
break;
case 5:
pUnit->Stop ();
break;
case 6:
pUnit->RunCmd (OLECMDID_SAVEAS);
break;
case 7:
pUnit->RunCmd (OLECMDID_PRINT);
break;
case 8:
pUnit->RunCmd (OLECMDID_PRINTPREVIEW);
break;
case 9:
pUnit->RunCmd (OLECMDID_PAGESETUP);
break;
}
}
void fnNavigate (PMDATA_INF pRetData, INT nArgCount, PMDATA_INF pArgInf)
{
CHHCtrl* pUnit = (CHHCtrl*)GetWndPtr (pArgInf);
LPCTSTR szDocument = (LPCTSTR)pArgInf [1].m_pText;
LPTSTR szChmFileName = pArgInf [2].m_dtDataType == _SDT_NULL ? NULL :
(LPTSTR)pArgInf [2].m_pText;
LPTSTR szWinName = pArgInf [3].m_dtDataType == _SDT_NULL ? NULL :
(LPTSTR)pArgInf [3].m_pText;
if (szChmFileName == NULL || *szChmFileName == '\0')
pUnit->Navigate (szDocument, 0, szWinName);
else
pUnit->NavigateChm (szChmFileName, szDocument, szWinName);
}
void fnGetType (PMDATA_INF pRetData, INT nArgCount, PMDATA_INF pArgInf)
{
pRetData->m_pText = CloneTextData ((LPTSTR)(LPCTSTR)
((CHHCtrl*)GetWndPtr (pArgInf))->GetType ());
}
void fnGetBusy (PMDATA_INF pRetData, INT nArgCount, PMDATA_INF pArgInf)
{
pRetData->m_bool = ((CHHCtrl*)GetWndPtr (pArgInf))->GetBusy ();
}
void fnIsReady (PMDATA_INF pRetData, INT nArgCount, PMDATA_INF pArgInf)
{
pRetData->m_bool = ((CHHCtrl*)GetWndPtr (pArgInf))->GetReadyState () ==
READYSTATE_COMPLETE;
}
//*** 命令实现信息:
PFN_EXECUTE_CMD s_RunFunc [] = // 索引应与s_CmdInfo中的命令定义顺序对应
{
fnExecute,
fnNavigate,
fnGetType,
fnGetBusy,
fnIsReady
};
///////////////////////////////////
//*** 常量定义信息:
// !!! 注意常量值由于已经运用到程序中,所以绝对不能改动。
// 顺序及值不能改动
LIB_CONST_INFO s_ConstInfo [] =
{
{ _WT("前进"), NULL, NULL, LVL_SIMPLE, CT_NUM, NULL, 0, },
{ _WT("后退"), NULL, NULL, LVL_SIMPLE, CT_NUM, NULL, 1, },
{ _WT("到首页"), NULL, NULL, LVL_SIMPLE, CT_NUM, NULL, 2, },
{ _WT("到搜索页"),NULL, NULL, LVL_SIMPLE, CT_NUM, NULL, 3, },
{ _WT("刷新"), NULL, NULL, LVL_SIMPLE, CT_NUM, NULL, 4, },
{ _WT("停止"), NULL, NULL, LVL_SIMPLE, CT_NUM, NULL, 5, },
{ _WT("另存为"), NULL, NULL, LVL_SIMPLE, CT_NUM, NULL, 6, },
{ _WT("打印"), NULL, NULL, LVL_SIMPLE, CT_NUM, NULL, 7, },
{ _WT("打印预览"),NULL, NULL, LVL_SIMPLE, CT_NUM, NULL, 8, },
{ _WT("页面设置"),NULL, NULL, LVL_SIMPLE, CT_NUM, NULL, 9, },
};
/////////////////////////////////////////////////////////////////////////////
INT WINAPI ProcessNotifyLib (INT nMsg, DWORD dwParam1, DWORD dwParam2)
{
INT nRet = NR_OK;
switch (nMsg)
{
case NL_SYS_NOTIFY_FUNCTION:
g_fnNotifySys = (PFN_NOTIFY_SYS)dwParam1;
break;
default:
nRet = NR_ERR;
break;
}
return nRet;
}
/////////////////////////////////////////////////////////////////////////////
//////////// 库定义开始
static LIB_INFO s_LibInfo =
{
/*Lib Format Ver*/ LIB_FORMAT_VER, // 保留未用。
// 本支持库的GUID串:
// guid: {5014D8FA-6DCA-40b6-8FA6-26D8183666EB}
#define LI_LIB_GUID_STR "5014D8FA6DCA40b68FA626D8183666EB"
/*guid str*/ _T (LI_LIB_GUID_STR),
/*m_nMajorVersion*/ 1,
/*m_nMinorVersion*/ 1,
//!!! 注意:凡是增删或更改了命令、窗口单元、数据类型、帮助信息等,只要对帮助
//!!! 文件生成会产生影响,都必须升级版本号,而不能只修改BuildNumber。
//!!! 改动后尽量升级版本号!!!
/*m_nBuildNumber*/ 3, // 1: 2.5; 2: 2.5补遗版; 3: 3.0版
// 构建版本号,无需对此版本号作任何处理。
// 本版本号仅用作区分相同正式版本号的库(譬如仅仅修改了几个 BUG)。
// 任何公布过给用户使用的版本其此版本号都应该不一样。
// 赋值时应该顺序递增。
/*m_nRqSysMajorVer*/ 3,
/*m_nRqSysMinorVer*/ 0,
/*m_nRqSysKrnlLibMajorVer*/ 3,
/*m_nRqSysKrnlLibMinorVer*/ 0,
/*name*/ _T ("超文本浏览框"),
/*lang*/ LT_CHINESE,
/*explain*/ _WT("本支持库实现了对超文本浏览框窗口单元的支持。"),
/*dwState*/ NULL,
/*szAuthor*/ _WT("飞扬软件工作室吴涛"),
/*szZipCode*/ NULL,
/*szAddress*/ NULL,
/*szPhoto*/ _WT("(0717)4222233"),
/*szFax*/ _WT("(0717)4222233"),
/*szEmail*/ _WT("fly@eyuyan.com"),
/*szHomePage*/ _WT("http://eyuyan.com"),
/*szOther*/ _WT("祝您一帆风顺,心想事成!"),
/*type count*/ sizeof (s_DataType) / sizeof (s_DataType[0]),
/*PLIB_DATA_TYPE_INFO*/ s_DataType,
/*CategoryCount*/ 0, // 加了类别需加此值。
/*category*/_WT("\0" // 类别说明表每项为一字符串,前四位数字表示图象索引号(从1开始,0无).
"\0"),
/*CmdCount*/ sizeof (s_CmdInfo) / sizeof (s_CmdInfo [0]),
/*BeginCmd*/ s_CmdInfo,
/*m_pCmdsFunc*/ s_RunFunc,
/*pfnRunAddInFn*/ NULL,
/*szzAddInFnInfo*/ NULL,
/*pfnNotify*/ ProcessNotifyLib,
/*pfnRunSuperTemplate*/ NULL,
/*szzSuperTemplateInfo*/ NULL,
/*nLibConstCount*/ sizeof (s_ConstInfo) / sizeof (s_ConstInfo [0]),
/*pLibConst*/ s_ConstInfo,
/*szzDependFiles*/ NULL,
};
PLIB_INFO WINAPI GetNewInf ()
{
return &s_LibInfo;
}
void CHtmlViewApp::InitCom ()
{
if (m_blComInited == FALSE)
{
OleInitialize (NULL);
m_blComInited = TRUE;
}
}
int CHtmlViewApp::ExitInstance()
{
if (m_blComInited)
{
OleUninitialize ();
m_blComInited = FALSE;
}
return CWinApp::ExitInstance();
}
CHtmlViewApp::~CHtmlViewApp()
{
if (m_blComInited)
OleUninitialize ();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -