📄 lib.h
字号:
/*/////////////*/
// 支持库可以通知易编辑环境(IDE)或易运行环境(RUNTIME)的码值:
struct MDATA
{
MDATA ()
{
m_pData = NULL;
m_nDataSize = 0;
}
LPBYTE m_pData;
INT m_nDataSize;
};
typedef MDATA* PMDATA;
struct EVENT_NOTIFY
{
// 记录事件的来源
DWORD m_dwFormID; // 调用ITF_CREATE_UNIT接口所传递过来的所处窗口ID(dwWinFormID参数)
DWORD m_dwUnitID; // 调用ITF_CREATE_UNIT接口所传递过来的窗口单元ID(dwUnitID参数)
INT m_nEventIndex; // 事件索引(在窗口单元定义信息LIB_DATA_TYPE_INFO中m_pPropertyBegin
// 成员中的位置)
INT m_nArgCount; // 本事件所传递的参数数目,最多 5 个。
INT m_nArgValue [5]; // 记录各参数值,SDT_BOOL 型参数值为 1 或 0。
//!!! 注意下面两个成员在没有定义返回值的事件中无效,其值可能为任意值。
BOOL m_blHasReturnValue; // 用户事件处理子程序处理完毕事件后是否提供了返回值。
INT m_nReturnValue; // 用户事件处理子程序处理完毕事件后的返回值,逻辑值用数值 0(假) 和 1(真) 返回。
/////////////////////////////////////
EVENT_NOTIFY (DWORD dwFormID, DWORD dwUnitID, INT nEventIndex)
{
m_dwFormID = dwFormID;
m_dwUnitID = dwUnitID;
m_nEventIndex = nEventIndex;
m_nArgCount = 0;
m_blHasReturnValue = FALSE;
m_nReturnValue = 0;
}
};
typedef EVENT_NOTIFY* PEVENT_NOTIFY;
/*///////////////////////*/
// NES_ 宏为仅被易编辑环境(IDE)处理的通知。
#define NES_GET_MAIN_HWND 1
// 取易编辑环境主窗口的句柄,可以在支持库的AddIn函数中使用。
#define NES_RUN_FUNC 2
// 通知易编辑环境运行指定的功能,返回一个BOOL值。
// dwParam1为功能号。
// dwParam2为一个双DWORD数组指针,分别提供功能参数1和2。
// NAS_ 宏为既被易编辑环境又被易运行环境处理的通知。
#define NAS_GET_LIB_DATA_TYPE_INFO 1002
// 返回指定库定义数据类型的PLIB_DATA_TYPE_INFO定义信息指针。
// dwParam1为欲获取信息的数据类型DATA_TYPE。
// 如果该数据类型无效或者不为库定义数据类型,则返回NULL,否则返回PLIB_DATA_TYPE_INFO指针。
// NRS_ 宏为仅能被易运行环境处理的通知。
#define NRS_UNIT_DESTROIED 2000
// 通知系统指定的单元已经被销毁。
// dwParam1为dwFormID
// dwParam2为dwUnitID
#define NRS_CONVERT_NUM_TO_INT 2001
// 转换其它数值格式到整数。
// dwParam1为 PMDATA_INF 指针,其 m_dtDataType 必须为数值型。
// 返回转换后的整数值。
#define NRS_GET_CMD_LINE_STR 2002
// 取当前命令行文本
// 返回命令行文本指针,有可能为空串。
#define NRS_GET_EXE_PATH_STR 2003
// 取当前执行文件所处目录名称
// 返回当前执行文件所处目录文本指针。
#define NRS_GET_EXE_NAME 2004
// 取当前执行文件名称
// 返回当前执行文件名称文本指针。
#define NRS_GET_UNIT_PTR 2006
// 取单元对象指针
// dwParam1为WinForm的ID
// dwParam2为WinUnit的ID
// 成功返回有效的单元对象CWnd*指针,失败返回NULL。
#define NRS_GET_AND_CHECK_UNIT_PTR 2007
// 取单元对象指针
// dwParam1为WinForm的ID
// dwParam2为WinUnit的ID
// 成功返回有效的单元对象CWnd*指针,失败自动报告运行时错误并立即退出程序。
#define NRS_EVENT_NOTIFY 2008
// 通知系统产生了事件。
// dwParam1为PEVENT_NOTIFY指针。
// 如果返回 0 ,表示此事件已被系统抛弃,否则表示系统已经成功传递此事件到用户
// 事件处理子程序。
#define NRS_STOP_PROCESS_EVENT_NOTIFY 2009
// 通知系统暂停处理事件通知。
#define NRS_CONTINUE_PROCESS_EVENT_NOTIFY 2010
// 通知系统继续处理事件通知。
#define NRS_DO_EVENTS 2018
// 通知Windows系统处理所有已有事件。
#define NRS_GET_UNIT_DATA_TYPE 2022
// dwParam1为WinForm的ID
// dwParam2为WinUnit的ID
// 成功返回有效的 DATA_TYPE ,失败返回 0 。
#define NRS_FREE_ARY 2023
// 释放指定数组数据。
// dwParam1为该数据的DATA_TYPE,只能为系统基本数据类型。
// dwParam2为指向该数组数据的指针。
#define NRS_MALLOC 2024
// 分配指定空间的内存,所有与易程序交互的内存都必须使用本通知分配。
// dwParam1为欲需求内存字节数。
// dwParam2如为0,则如果分配失败就自动报告运行时错并退出程序。
// 如不为0,则如果分配失败就返回NULL。
// 返回所分配内存的首地址。
#define NRS_MFREE 2025
// 释放已分配的指定内存。
// dwParam1为欲释放内存的首地址。
#define NRS_MREALLOC 2026
// 重新分配内存。
// dwParam1为欲重新分配内存尺寸的首地址。
// dwParam2为欲重新分配的内存字节数。
// 返回所重新分配内存的首地址,失败自动报告运行时错并退出程序。
#define NRS_RUNTIME_ERR 2027
// 通知系统已经产生运行时错误。
// dwParam1为char*指针,说明错误文本。
#define NRS_EXIT_PROGRAM 2028
// 通知系统退出用户程序。
// dwParam1为退出代码,该代码将被返回到操作系统。
#define NRS_GET_PRG_TYPE 2030
// 返回当前用户程序的类型,为2(调试版)或3(发布版)。
/*///////////////////////////////////////////////////////////////////*/
// 易编辑环境(IDE)或易运行环境(RUNTIME)可以通知支持库的码值:
#define NL_SYS_NOTIFY_FUNCTION 1
// 告知支持库通知系统用的函数指针,在装载支持库前通知,可能有多次,
// 后通知的值应该覆盖前面所通知的值),忽略返回值。
// 库可将此函数指针记录下来以便在需要时使用它通知信息到系统。
// dwParam1: (PFN_NOTIFY_SYS)
/*///////////////////////////////////////////////////////////////////*/
#define NR_OK 0
#define NR_ERR -1
typedef INT (WINAPI *PFN_NOTIFY_LIB) (INT nMsg, DWORD dwParam1 = 0, DWORD dwParam2 = 0);
// 此函数用作易编辑环境(IDE)或易运行环境(RUNTIME)通知支持库有关事件。
typedef INT (WINAPI *PFN_NOTIFY_SYS) (INT nMsg, DWORD dwParam1 = 0, DWORD dwParam2 = 0);
// 此函数用作库通知易编辑环境(IDE)或易运行环境(RUNTIME)有关事件。
/* 所有命令和方法实现函数的原型。
1、必须是 CDECL 调用方式;
2、pRetData 用作返回数据;
3、!!!如果指定库命令返回数据类型不为 _SDT_ALL ,可以
不填充 pRetData->m_dtDataType,如果为 _SDT_ALL ,则必须填写;
4、pArgInf 提供参数数据本身,所指向的 MDATA_INF 记录每个输入参数,数目等同于 nArgCount 。*/
typedef void (*PFN_EXECUTE_CMD) (PMDATA_INF pRetData, INT nArgCount, PMDATA_INF pArgInf);
// 运行支持库中ADDIN功能的函数
typedef INT (WINAPI *PFN_RUN_ADDIN_FN) (INT nAddInFnIndex);
// 创建库中提供的超级模板程序的函数
typedef INT (WINAPI *PFN_SUPER_TEMPLATE) (INT nTemplateIndex);
////////////////////////////////////////////////////
#define LIB_FORMAT_VER 20000101 // 库格式号
/* !!! 注意:支持库文件名的后缀必须固定为.FNx,其中x为一类型字母,目前有意义的后缀有:
1、“.fne”: 带编辑信息、有运行支持代码的支持库;
2、“.fnl”: 带编辑信息、无运行支持代码的支持库;
3、“.fnr”: 不带编辑和声明信息、仅有运行支持代码的支持库;
*/
typedef struct
{
DWORD m_dwLibFormatVer;
// 库格式号,应该等于LIB_FORMAT_VER。
LPTSTR m_szGuid;
// 对应于本库的唯一GUID串,不能为NULL或空,相同库的所有后续版本此串都应相同。
// 注意此 GUID 文本必须使用专用工具软件(如随本文档附带的guidgen.exe)生成,以防止出现重复。
INT m_nMajorVersion; // 本库的主版本号,必须大于0。
INT m_nMinorVersion; // 本库的次版本号。
INT m_nBuildNumber;
// 构建版本号。
// 本版本号仅用作区分相同正式版本号的系统软件(譬如仅仅修改了几个 BUG,
// 不值得升级正式版本的系统软件)。任何公布过给用户使用的版本其构建版本
// 号都应该不一样。
// 赋值时应该顺序递增。
INT m_nRqSysMajorVer; // 所需要易语言系统的主版本号,目前应该为 3 。
INT m_nRqSysMinorVer; // 所需要易语言系统的次版本号,目前应该为 0 。
INT m_nRqSysKrnlLibMajorVer; // 所需要的系统核心支持库的主版本号,目前应该为 3 。
INT m_nRqSysKrnlLibMinorVer; // 所需要的系统核心支持库的次版本号,目前应该为 0 。
LPTSTR m_szName; // 库名,不能为NULL或空。
// 语言类别宏
#define LT_CHINESE 1
#define LT_ENGLISH 2
INT m_nLanguage; // 本库所支持的语言,目前应该为 LT_CHINESE 。
LPTSTR m_szExplain; // 有关本库的详细解释
#define LBS_FUNC_NO_RUN_CODE (1 << 2)
// 本库仅为声明库,没有对应功能的支持代码,因此不能运行。
#define LBS_NO_EDIT_INFO (1 << 3)
// 本库内无供编辑用的信息(编辑信息主要为:各种名称、解释字符串等),无法被易语言IDE加载。
DWORD m_dwState;
////////////////// 有关本库作者的信息。
LPTSTR m_szAuthor;
LPTSTR m_szZipCode;
LPTSTR m_szAddress;
LPTSTR m_szPhoto;
LPTSTR m_szFax;
LPTSTR m_szEmail;
LPTSTR m_szHomePage;
LPTSTR m_szOther;
//////////////////
INT m_nDataTypeCount; // 本库中自定义数据类型的数目,必须等于m_pDataType所指向数组成员的数目。
PLIB_DATA_TYPE_INFO m_pDataType; // 本库中所有自定义数据类型的定义信息。
INT m_nCategoryCount; // 全局命令类别数目,必须等同于下面m_szzCategory成员所实际提供的数目。
LPTSTR m_szzCategory; // 全局命令类别说明表,每项为一字符串,前四位数字表示图象索引号(从1开始,0表示无)。
// 减一后的值为指向支持库中名为"LIB_BITMAP"的BITMAP资源中某一部分16X13位图的索引。
INT m_nCmdCount; // 本库中提供的所有命令(全局命令及对象方法)的数目(如无则为0)。
PCMD_INFO m_pBeginCmdInfo; // 指向所有命令及方法的定义信息数组(如m_nCmdCount为0,则为NULL)。
PFN_EXECUTE_CMD* m_pCmdsFunc; // 指向每个命令的实现代码首地址,(如m_nCmdCount为0,则为NULL)。
PFN_RUN_ADDIN_FN m_pfnRunAddInFn; // 可为NULL,用作为易语言IDE提供附加功能。
// 有关AddIn功能的说明,两个字符串说明一个功能。第一个为功能名称
// (限20字符),第二个为功能详细介绍(限60字符),最后由两个空串结束。
LPTSTR m_szzAddInFnInfo;
PFN_NOTIFY_LIB m_pfnNotify; // 不能为NULL,提供接收来自易语言IDE或运行环境通知信息的函数。
// 超级模板暂时保留不用。
PFN_SUPER_TEMPLATE m_pfnSuperTemplate; // 为NULL
LPTSTR m_szzSuperTemplateInfo; // 为NULL
// 本库定义的所有常量。
INT m_nLibConstCount; // 常量数目。
PLIB_CONST_INFO m_pLibConst; // 指向常量定义数组。
LPTSTR m_szzDependFiles; // 可为NULL
// 本库正常运行所需要依赖的其他文件,在制作安装软件时将会自动带上这些文件。
}
LIB_INFO, *PLIB_INFO;
/*////////////////////////////////////////////*/
#define FUNCNAME_GET_LIB_INFO "GetNewInf" // 取本支持库的PLIB_INFO指针的输出函数名称
typedef PLIB_INFO (WINAPI *PFN_GET_LIB_INFO) (); // GetNewInf的函数原型
typedef INT (*PFN_ADD_IN_FUNC) (); // m_pfnRunAddInFn的函数原型
/*////////////////////////////////////////////*/
#define LIB_BMP_RESOURCE "LIB_BITMAP" // 支持库中提供的图像资源的名称
#define LIB_BMP_CX 16 // 每一图像资源的宽度
#define LIB_BMP_CY 13 // 每一图像资源的高度
#define LIB_BMP_BKCOLOR RGB(255, 255, 255) // 图像资源的底色
//////////////////////////// 运行时所使用的宏
#define WU_GET_WND_PTR (WM_APP + 2) // 用作支持窗口单元事件反馈。
#define WU_SIZE_CHANGED (WM_APP + 3) // 用作在窗口尺寸改变后通知所有条状窗口单元。
#define WU_PARENT_RELAYOUT_BAR (WM_APP + 4) // 用作通知顶层窗口重新布局所有的 bar 单元,
// 通常在 bar 单元改变了自身尺寸后使用。
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -