📄 lib.h
字号:
#ifndef __LIB_H
#define __LIB_H
/*
版权声明:
本文件版权为易语言作者吴涛所有,仅授权给第三方用作开发易语言支持库,禁止用于其他任何场合。
*/
// 以下是由系统定义的基本数据类型,不可再更改。
#define _SDT_NULL 0 // 空白数据类型
#define _SDT_ALL MAKELONG (MAKEWORD (0, 0), 0x8000) // 通用型
/* 仅用于支持库命令定义其参数或返回值的数据类型,当用于定义库命令参数时,
_SDT_ALL可以匹配所有数据类型(数组类型必须符合要求)。*/
#define SDT_BYTE MAKELONG (MAKEWORD (1, 1), 0x8000) // 字节
#define SDT_SHORT MAKELONG (MAKEWORD (1, 2), 0x8000) // 短整数
#define SDT_INT MAKELONG (MAKEWORD (1, 3), 0x8000) // 整数
#define SDT_INT64 MAKELONG (MAKEWORD (1, 4), 0x8000) // 长整数
#define SDT_FLOAT MAKELONG (MAKEWORD (1, 5), 0x8000) // 小数
#define SDT_DOUBLE MAKELONG (MAKEWORD (1, 6), 0x8000) // 双精度小数
#define SDT_BOOL MAKELONG (MAKEWORD (2, 0), 0x8000) // 逻辑
#define SDT_DATE_TIME MAKELONG (MAKEWORD (3, 0), 0x8000) // 日期时间
#define SDT_TEXT MAKELONG (MAKEWORD (4, 0), 0x8000) // 文本
#define SDT_BIN MAKELONG (MAKEWORD (5, 0), 0x8000) // 字节集
#define SDT_SUB_PTR MAKELONG (MAKEWORD (6, 0), 0x8000) // 记录用户易语言子程序的代码地址
// 用作区分数据类型的类别。
#define DTM_SYS_DATA_TYPE_MASK 0x80000000
#define DTM_USER_DATA_TYPE_MASK 0x40000000
#define DTM_LIB_DATA_TYPE_MASK 0x00000000
// 在数据类型中的数组标志,如果某数据类型值此位置1,则表示为此数据类型的数组。
// 本标志仅用作在运行时为具有AS_RECEIVE_VAR_OR_ARRAY或AS_RECEIVE_ALL_TYPE_DATA
// 标志的库命令参数说明其为是否为数组数据,其他场合均未使用。因此其他地方均
// 可以忽略本标志。
#define DT_IS_ARY 0x20000000
typedef DWORD DATA_TYPE;
typedef DATA_TYPE* PDATA_TYPE;
typedef struct
{
LPTSTR m_szName; // 参数名称
LPTSTR m_szExplain; // 参数详细解释
SHORT m_shtBitmapIndex; // 参见 CMD_INFO 中的同名成员
SHORT m_shtBitmapCount; // 参见 CMD_INFO 中的同名成员
DATA_TYPE m_dtDataType; // 参数的数据类型
INT m_nDefault;
// 系统基本类型参数的默认指定值(在编译时编译器将自动处理):
// 1、数值型:直接为数值(如为小数,只能指定其整数部分,
// 如为长整数,只能指定不超过INT限值的部分);
// 2、逻辑型:1等于真,0等于假;
// 3、文本型:本成员此时为LPTSTR指针,指向默认文本串;
// 4、其它所有类型参数一律无默认指定值。
#define AS_HAS_DEFAULT_VALUE (1 << 0)
// 本参数有默认值,默认值在m_nDefault中说明,与下标志互斥。
#define AS_DEFAULT_VALUE_IS_EMPTY (1 << 1)
// 本参数有默认值,默认值为空,与上标志互斥。
// 下面五个标志同时只能有一个置位。
#define AS_RECEIVE_VAR (1 << 2)
// 为本参数提供数据时必须提供非数组型容器。
#define AS_RECEIVE_VAR_ARRAY (1 << 3)
// 为本参数提供数据时必须提供数组型容器。
#define AS_RECEIVE_VAR_OR_ARRAY (1 << 4)
// 为本参数提供数据时必须提供数组或非数组型容器。
#define AS_RECEIVE_ARRAY_DATA (1 << 5)
// 为本参数提供数据时必须提供数组型数据。
#define AS_RECEIVE_ALL_TYPE_DATA (1 << 6)
// 为本参数提供数据时可以提供非数组或数组数据。
DWORD m_dwState;
}
ARG_INFO, *PARG_INFO;
struct CMD_INFO
{
LPTSTR m_szName; // 命令中文名称
LPTSTR m_szEGName; // 命令英文名称,可以为空或NULL。
LPTSTR m_szExplain; // 命令详细解释
SHORT m_shtCategory; // 全局命令的所属类别,从1开始,减一后的值为指向LIB_INFO的
// m_szzCategory成员所提供的某个类别字符串的索引。
// 对象成员命令的此值为-1。
#define CT_IS_HIDED (1 << 2)
// 本命令是否为隐含命令(即不需要由用户直接输入的命令(如循环结束命令)或被废弃
// 但为了保持兼容性又要存在的命令)。
#define CT_IS_ERROR (1 << 3)
// 本命令在本库中不能使用,具有此标志一定隐含,主要用作在不同语言版本的相同库中使用,
// 即:A命令在A语言版本库中可能需要实现并使用,但在B语言版本库中可能就不需要。如果
// 程序中使用了具有此标志的命令,则只能支持该程序调入和编译,而不能支持运行。
// 如具有此标志,可以不实现本命令的执行部分。
#define CT_DISABLED_IN_RELEASE_VER (1 << 4)
// 具有本标志的命令在易语言系统编译RELEASE版易程序时将被跳过,本类型命令必须无返回值。
#define CT_ALLOW_APPEND_NEW_ARG (1 << 5)
// 在本命令的参数表的末尾是否可以添加新的参数,新参数等同于参数表中的最后一个参数。
#define CT_RETURN_ARRAY_DATA (1 << 6)
// 用于说明m_dtRetType,说明是否为返回数组数据。
WORD m_wState;
/* !!!!! 千万注意:如果返回值类型定义为 _SDT_ALL ,绝对不能返回数组(即CT_RETURN_ARRAY_DATA
置位)或复合数据类型的数据(即用户或库自定义数据类型但不包含窗口或菜单单元),
因为用户程序无法自动删除复合类型中所分配的额外空间(如文本型或者字节集型成员等)。 */
DATA_TYPE m_dtRetType; // 返回值类型。
WORD m_wReserved; // 保留,必须为0。
// 级别宏,用作为用户提供学习难度说明。
#define LVL_SIMPLE 1 // 初级
#define LVL_SECONDARY 2 // 中级
#define LVL_HIGH 3 // 高级
SHORT m_shtUserLevel; // 命令的用户级别,本成员的值为上面的级别宏。
SHORT m_shtBitmapIndex; // 指定图像索引,从1开始,0表示无。减一后的值为指向支持库中名为
// "LIB_BITMAP"的BITMAP资源中某一部分16X13位图的索引。
SHORT m_shtBitmapCount; // 图像数目(用作为IDE提供动画图片).
INT m_nArgCount; // 命令的参数数目
PARG_INFO m_pBeginArgInfo; // 指向本命令的参数定义信息数组
};
typedef CMD_INFO* PCMD_INFO;
struct LIB_DATA_TYPE_ELEMENT
{
DATA_TYPE m_dtDataType; // 本数据成员的数据类型。
LPBYTE m_pArySpec; // 如果本成员为数组,则本成员提供数组指定串,否则此值为NULL。
// 数组指定串的格式为:首先为一个BYTE记录该数组的维数(如果为0表示不为数组,最大值为0x7f),
// 然后为对应数目的INT值顺序记录对应维的元素数目。
LPTSTR m_szName; // 本数据成员的名称,如果本数据成员所属的数据类型只有这一个数据成员,此值应该为NULL。
LPTSTR m_szEGName; // 本数据成员的英文名称,可以为空或NULL。
LPTSTR m_szExplain; // 本数据成员的详细说明。
#define LES_HAS_DEFAULT_VALUE (1 << 0) // 本数据成员有默认值,默认值在m_nDefault中说明。
DWORD m_dwState;
// 仅当 m_dwState 包含 LES_HAS_DEFAULT_VALUE 标志且非数组时才有效。
INT m_nDefault;
// 本数据成员的默认指定值:
// 1、数值型:直接为数值(如为小数,只能指定其整数部分,
// 如为长整数,只能指定不超过INT限值的部分);
// 2、逻辑型:1等于真,0等于假;
// 3、文本型:本变量此时为LPTSTR指针,指向默认文本串;
// 4、其它所有类型参数一律无默认指定值。
};
typedef LIB_DATA_TYPE_ELEMENT* PLIB_DATA_TYPE_ELEMENT;
// 固定属性的数目
#define FIXED_WIN_UNIT_PROPERTY_COUNT 8
// 每个固定属性定义
#define FIXED_WIN_UNIT_PROPERTY \
{ _WT("左边"), _WT("left"), NULL, UD_INT, NULL, NULL }, \
{ _WT("顶边"), _WT("top"), NULL, UD_INT, NULL, NULL }, \
{ _WT("宽度"), _WT("width"), NULL, UD_INT, NULL, NULL }, \
{ _WT("高度"), _WT("height"), NULL, UD_INT, NULL, NULL }, \
{ _WT("标记"), _WT("tag"), NULL, UD_TEXT, NULL, NULL }, \
{ _WT("可视"), _WT("visible"), NULL, UD_BOOL, NULL, NULL }, \
{ _WT("禁止"), _WT("disable"), NULL, UD_BOOL, NULL, NULL }, \
{ _WT("鼠标指针"), _WT("MousePointer"), NULL, UD_CURSOR, NULL, NULL }
// 用作定义窗口单元属性。
struct UNIT_PROPERTY
{
LPTSTR m_szName; // 属性名称,注意为利于在属性表中同时设置多对象的属性,相同意义属性的名称最好一致。
LPTSTR m_szEGName; // 英文名称。
LPTSTR m_szExplain; // 属性解释。
#define UD_INT 1001 // 数据为INT值
#define UD_DOUBLE 1002 // 数据为DOUBLE值
#define UD_BOOL 1003 // 数据为BOOL值
#define UD_DATE_TIME 1004 // 数据为DATE值
#define UD_TEXT 1005 // 数据为字符串
#define UD_PICK_INT 1006 // 数据为INT值,用户只能选择,不能编辑。
#define UD_PICK_TEXT 1007 // 数据为待选字符串,用户只能选择,不能编辑。
#define UD_EDIT_PICK_TEXT 1008 // 数据为待选字符串,用户可以编辑。
#define UD_PIC 1009 // 为图片文件数据
#define UD_ICON 1010 // 为图标文件数据
#define UD_CURSOR 1011
// 第一个INT记录鼠标指针类型,具体值见 Windows API 的 LoadCursor 函数。
// 如为-1,则为自定义鼠标指针,此时后跟相应长度的鼠标指针文件内容。
#define UD_MUSIC 1012 // 为声音文件数据
#define UD_FONT 1013 // 为一个LOGFONT数据结构,不能再改。
#define UD_COLOR 1014 // 数据为COLORREF值。
#define UD_COLOR_TRANS 1015
// 数据为COLORREF值,允许透明颜色(用CLR_DEFAULT代表,CLR_DEFAULT在
// VC++的COMMCTRL.H头文件中定义)。
#define UD_FILE_NAME 1016
// 数据为文件名字符串。此时m_szzPickStr中的数据为:
// 对话框标题 + "\0" + 文件过滤器串 + "\0" + 默认后缀 + "\0" +
// "1"(取保存文件名)或"0"(取读入文件名) + "\0"
#define UD_COLOR_BACK 1017
// 数据为COLORREF值,允许系统默认背景颜色(用CLR_DEFAULT代表)。
#define UD_ODBC_CONNECT_STR 1021
// ODBC数据连接文本
#define UD_ODBC_SELECT_STR 1022
// ODBC数据查询SQL文本
#define UD_IMAGE_LIST 1023
// 图片组,数据结构为:
#define IMAGE_LIST_DATA_MARK (MAKELONG ('IM', 'LT'))
/*
DWORD: 标志数据:为 IMAGE_LIST_DATA_MARK
COLORREF: 透明颜色(可以为CLR_DEFAULT)
后面为图片组数据,用CImageList::Read和CImageList::Write读写。
*/
#define UD_CUSTOMIZE 1024 // 自定义类型属性
SHORT m_shtType; // 属性的数据类型(为上面的宏值)。
#define UW_HAS_INDENT (1 << 0) // 在属性表中显示时向外缩进一段,一般用于子属性。
#define UW_GROUP_LINE (1 << 1) // 在属性表中本属性下显示分组底封线。
#define UW_ONLY_READ (1 << 2) // 只读属性,设计时不可用,运行时不能写。
#define UW_CANNOT_INIT (1 << 3) // 设计时不可用,但运行时可以正常读写。与上标志互斥。
WORD m_wState;
LPTSTR m_szzPickStr;
// 当m_nType为UP_PICK_INT、UP_PICK_TEXT、UD_EDIT_PICK_TEXT、UD_FILE_NAME时不能为NULL。
// 顺序记录以"\0"分隔的所有备选文本(除开UD_FILE_NAME为所说明的特殊格式),最后以一个"\0"结束。
};
typedef UNIT_PROPERTY* PUNIT_PROPERTY;
typedef struct
{
LPTSTR m_szName; // 参数名称
LPTSTR m_szExplain; // 参数详细解释
#define EAS_IS_BOOL_ARG (1 << 0) // 为逻辑型参数,如无此标志,则认为是整数型参数
DWORD m_dwState;
}
EVENT_ARG_INFO, *PEVENT_ARG_INFO;
struct EVENT_INFO
{
LPTSTR m_szName; // 事件名称
LPTSTR m_szExplain; // 事件详细解释
#define EV_IS_HIDED (1 << 0)
// 本事件是否为隐含事件(即不能被一般用户所使用或被废弃但为了保持兼容性又要存在的事件)。
#define EV_RETURN_INT (1 << 3)
// 本事件的处理子程序需要返回一个整数。
#define EV_RETURN_BOOL (1 << 4)
// 本事件的处理子程序需要返回一个逻辑值,与上标志互斥。
DWORD m_dwState;
INT m_nArgCount; // 事件的参数数目
PEVENT_ARG_INFO m_pEventArgInfo; // 事件参数
};
typedef EVENT_INFO* PEVENT_INFO;
////////////////////////////////////
typedef DWORD HUNIT;
// 通用接口指针。
typedef void (WINAPI *PFN_INTERFACE) ();
// 窗口单元对外接口ID。
#define ITF_CREATE_UNIT 1 // 创建单元
// 下面两个接口仅在可视化设计窗口界面时使用。
#define ITF_PROPERTY_UPDATE_UI 2 // 说明属性目前可否被修改
#define ITF_DLG_INIT_CUSTOMIZE_DATA 3 // 使用对话框设置自定义数据
#define ITF_NOTIFY_PROPERTY_CHANGED 4 // 通知某属性数据被修改
#define ITF_GET_ALL_PROPERTY_DATA 5 // 取全部属性数据
#define ITF_GET_PROPERTY_DATA 6 // 取某属性数据
#define ITF_IS_NEED_THIS_KEY 8 // 询问单元是否需要指定的按键信息,用作窗口单元
// 截获处理默认为运行时环境处理的按键,如TAB、
// SHIFT+TAB、UP、DOWN等。
typedef PFN_INTERFACE (WINAPI *PFN_GET_INTERFACE) (INT nInterfaceNO);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -