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

📄 lib.h

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

#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 + -