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

📄 lib.h

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

// 创建单元,成功时返回HUNIT,失败返回NULL。
typedef HUNIT (WINAPI *PFN_CREATE_UNIT) (
        LPBYTE pAllPropertyData,            //   指向本窗口单元的已有属性数据,由本窗口单元的
                                            // ITF_GET_PROPERTY_DATA接口产生,如果没有数据则为NULL。
        INT nAllPropertyDataSize,           //   提供pAllPropertyData所指向数据的尺寸,如果没有则为0。
		DWORD dwStyle,                      //   预先设置的窗口风格。
        HWND hParentWnd,                    //   父窗口句柄。
        UINT uID,                           //   在父窗口中的ID。
        HMENU hMenu,                        //   未使用。
        INT x, INT y, INT cx, INT cy,       //   指定位置及尺寸。
		DWORD dwWinFormID, DWORD dwUnitID,  //   本窗口单元所在窗口及本身的ID,用作通知到系统。
		HWND hDesignWnd = 0,                //   如果blInDesignMode为真,则hDesignWnd提供所设计窗口的窗口句柄。
        BOOL blInDesignMode = FALSE);       //   说明是否被易语言IDE调用以进行可视化设计,运行时为假。

// 如果指定属性目前可以被操作,返回真,否则返回假。
typedef BOOL (WINAPI *PFN_PROPERTY_UPDATE_UI) (
        HUNIT hUnit,            // 由PFN_CREATE_UNIT返回的已创建窗口单元的句柄,下同。
        INT nPropertyIndex);    // 所需要查询属性的索引值,下同。

// 用作设置类型为UD_CUSTOMIZE的单元属性。
// 如果需要重新创建该单元才能修改单元外形,请返回真。
typedef BOOL (WINAPI *PFN_DLG_INIT_CUSTOMIZE_DATA) (
        HUNIT hUnit,
        INT nPropertyIndex,
		BOOL* pblModified = NULL,   //   如果pblModified不为NULL,请在其中返回是否
                                    // 被用户真正修改(便于易语言IDE建立UNDO记录)。
        LPVOID pReserved = NULL);   // 保留未用。

// 用作记录某属性的具体属性值。
union UNIT_PROPERTY_VALUE
{
	INT			m_int;			// 对应的属性类别:UD_INT、UD_PICK_INT,下同。
	DOUBLE		m_double;		// UD_DOUBLE
	BOOL		m_bool;			// UD_BOOL
	DATE		m_dtDateTime;	// UD_DATE_TIME
	COLORREF	m_clr;			// UD_COLOR、UD_COLOR_TRANS、UD_COLOR_BACK

	LPTSTR		m_szText;		//   UD_TEXT、UD_PICK_TEXT、UD_EDIT_PICK_TEXT、
			                    // UD_ODBC_CONNECT_STR、UD_ODBC_SELECT_STR

	LPTSTR		m_szFileName;	// UD_FILE_NAME

    // UD_PIC、UD_ICON、UD_CURSOR、UD_MUSIC、UD_FONT、UD_CUSTOMIZE、UD_IMAGE_LIST
	struct
	{
		LPBYTE  m_pData;
		INT     m_nDataSize;
	} m_data;

	UNIT_PROPERTY_VALUE ()
	{
		memset ((LPBYTE)this, 0, sizeof (UNIT_PROPERTY_VALUE));
	}
};
typedef UNIT_PROPERTY_VALUE* PUNIT_PROPERTY_VALUE;

//   通知某属性(非UD_CUSTOMIZE类别属性)数据被用户修改,需要根据该修改相应更改
// 内部数据及外形,如果确实需要重新创建才能修改单元外形,请返回真。
//   注意:必须进行所传入值的合法性校验。
typedef BOOL (WINAPI *PFN_NOTIFY_PROPERTY_CHANGED) (
        HUNIT hUnit,
        INT nPropertyIndex,
		PUNIT_PROPERTY_VALUE pPropertyValue,    // 用作修改的相应属性数据。
        LPTSTR* ppszTipText = NULL);    // 目前尚未使用。

// 取某属性数据到pPropertyValue中,成功返回真,否则返回假。
/*  注意:如果在设计时(由调用PFN_CREATE_UNIT时的blInDesignMode参数决定),
pPropertyValue必须返回所存储的值。如果在运行时(blInDesignMode为假),必须
返回实际的当前实时值。
    比如说,编辑框窗口单元的“内容”属性,设计时必须返回内部所保存的值,而
运行时就必须调用 GetWindowText 去实时获取。 */
typedef BOOL (WINAPI *PFN_GET_PROPERTY_DATA) (
        HUNIT hUnit,
        INT nPropertyIndex,
		PUNIT_PROPERTY_VALUE pPropertyValue);   // 用作接收欲读取属性的数据。

//   返回本窗口单元的全部属性数据,由该窗口单元的实现代码自行设计格式将
// 所有属性数据组合到一起。此窗口单元的PFN_CREATE_UNIT接口必须能够正确解
// 读此数据。
typedef HGLOBAL (WINAPI *PFN_GET_ALL_PROPERTY_DATA) (HUNIT hUnit);

// 询问单元是否需要指定的按键信息,如果需要,返回真,否则返回假。
typedef BOOL (WINAPI *PFN_IS_NEED_THIS_KEY) (
        HUNIT hUnit,
        WORD wKey);

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

#define	UNIT_BMP_SIZE			24		// 单元标志位图的宽度和高度。
#define	UNIT_BMP_BACK_COLOR		(RGB (192, 192, 192))	// 单元标志位图的背景颜色。

struct LIB_DATA_TYPE_INFO  // 库定义数据类型结构
{
	LPTSTR m_szName;    // 名称
	LPTSTR m_szEGName;  // 英文名称,可为空或NULL。
	LPTSTR m_szExplain; // 详细解释,如无则可为NULL。

	INT m_nCmdCount;        // 本数据类型成员方法的数目(可为0)。
	LPINT m_pnCmdsIndex;	// 顺序记录本类型中所有成员方法命令在支持库命令表中的索引值,可为NULL。

    //   本类型是否为隐含类型(即不能由用户直接用作定义的类型,如被废弃
    // 但为了保持兼容性又要存在的类型)。
	#define		LDT_IS_HIDED				(1 << 0)
    // 本类型在本库中不能使用,具有此标志一定隐含。
    // 即使具有此标志,本类型的类型数据也必须完整定义。
	#define		LDT_IS_ERROR				(1 << 1)
    // 是否为窗口单元,如此标志置位则m_nElementCount必为0,
	#define		LDT_WIN_UNIT				(1 << 6)
    // 是否为容器型窗口单元,如有此标志,LDT_WIN_UNIT必须置位。
	#define		LDT_IS_CONTAINER			(1 << 7)
    // 是否为仅用作提供功能的窗口单元(如时钟),如此标志置位则LDT_WIN_UNIT必置位。
    // 具有此标志的单元在运行时无可视外形。
	#define		LDT_IS_FUNCTION_PROVIDER	(1 << 15)
    // 仅用作窗口单元,如此标志置位则表示此单元不能接收输入焦点,不能TAB键停留。
	#define		LDT_CANNOT_GET_FOCUS		(1 << 16)
    // 仅用作窗口单元,如此标志置位则表示此单元可以接收输入焦点,但默认不停留TAB键,
    // 本标志与上标志互斥。
	#define		LDT_DEFAULT_NO_TABSTOP		(1 << 17)
    // 是否为需要自调整位置或尺寸的条状窗口单元(如工具条、状态条等),对于具有此标志的单元,
    // 所在窗口尺寸改变后易语言运行时环境会自动发送给WU_SIZE_CHANGED消息。
    // 注意:条状窗口单元如果需要自动顶部对齐必须具有 CCS_TOP 窗口风格,如果需要自动底部
    // 对齐必须具有 CCS_BOTTOM 窗口风格。
	#define		LDT_BAR_SHAPE				(1 << 20)
	DWORD   m_dwState;

    ////////////////////////////////////////////
    // 以下成员只有在为窗口单元、菜单时才有效。

	DWORD m_dwUnitBmpID;		// 指定在支持库中的单元图像资源ID(注意不同于上面的图像索引),0为无。
                                // 尺寸必须为 24 X 24 ,背景颜色为 RGB (192, 192, 192) 。

	INT m_nEventCount;  // 本单元的事件数目。
	PEVENT_INFO m_pEventBegin;	// 定义本单元的所有事件。

	INT m_nPropertyCount;
	PUNIT_PROPERTY m_pPropertyBegin;

    // 用作提供本窗口单元的所有接口。
	PFN_GET_INTERFACE m_pfnGetInterface;

    ////////////////////////////////////////////
    // 以下成员只有在不为窗口单元、菜单时才有效。

	// 本数据类型中子成员的数目(可为0)。如为窗口、菜单单元,此变量值必为0。
	INT	m_nElementCount;
	PLIB_DATA_TYPE_ELEMENT m_pElementBegin;  // 指向子成员数组的首地址。
};
typedef LIB_DATA_TYPE_INFO* PLIB_DATA_TYPE_INFO;

/*////////////////////////////////////////////*/

struct LIB_CONST_INFO  // 库常量数据结构
{
	LPTSTR	m_szName;
	LPTSTR	m_szEGName;
	LPTSTR	m_szExplain;

	SHORT	m_shtReserved;  // 必须为 1 。

	#define	CT_NULL			0
	#define	CT_NUM			1	// sample: 3.1415926
	#define	CT_BOOL			2	// sample: 1
	#define	CT_TEXT			3	// sample: "abc"
	SHORT	m_shtType;

	LPTSTR	m_szText;		// CT_TEXT
	DOUBLE	m_dbValue;		// CT_NUM、CT_BOOL
};
typedef LIB_CONST_INFO* PLIB_CONST_INFO;

//////////////////////////////////////////// 常用数据结构。

typedef struct
{
    DWORD m_dwFormID;
    DWORD m_dwUnitID;
}
MUNIT, *PMUNIT;

#pragma pack (push, old_value)   // 保存VC++编译器结构对齐字节数。
#pragma pack (1)    // 设置为以一字节对齐。

struct MDATA_INF
{
    union
    {
        // 注意当对应参数具有AS_RECEIVE_VAR或AS_RECEIVE_VAR_ARRAY或AS_RECEIVE_VAR_OR_ARRAY
        // 标志定义时将使用下面的第二部分。

        // 第一部分。
	    BYTE	      m_byte;         // SDT_BYTE 数据类型的数据,下同。
	    SHORT	      m_short;        // SDT_SHORT
	    INT		      m_int;          // SDT_INT
	    INT64	      m_int64;        // SDT_INT64
	    FLOAT	      m_float;        // SDT_FLOAT
	    DOUBLE	      m_double;       // SDT_DOUBLE
        DATE          m_date;         // SDT_DATE_TIME
        BOOL          m_bool;         // SDT_BOOL

        char*         m_pText;        // SDT_TEXT,经过系统预处理,即使是空文本,此指针值也不会为NULL,以便于处理。
                                      // 指针所指向数据的格式见前面的描述。
                                      // !!!为了避免修改到常量段(m_pText有可能会指向易程序常量段区域)中
                                      // 的数据,只可读取而不可更改其中的内容,下同。

        LPBYTE        m_pBin;         // SDT_BIN,经过系统预处理,即使是空字节集,此指针值也不会为NULL,以便于处理。
                                      // 指针所指向数据的格式见前面的描述。
                                      // !!!只可读取而不可更改其中的内容。

        DWORD         m_dwSubCodeAdr; // SDT_SUB_PTR,为子程序代码地址指针。
        MUNIT         m_unit;         // 窗口单元、菜单数据类型的数据。

        void*         m_pCompoundData;// 复合数据类型数据指针,指针所指向数据的格式见前面的描述。
                                      // !!! 只可读取而不可更改其中的内容。

        void*         m_pAryData;     // 数组数据指针,指针所指向数据的格式见前面的描述。
                                      // 注意如果为文本或字节集数组,则成员数据指针可能为NULL。
                                      // !!! 只可读取而不可更改其中的内容。

        // 第二部分。
        // 为指向变量地址的指针,仅当参数具有AS_RECEIVE_VAR或AS_RECEIVE_VAR_ARRAY或
        // AS_RECEIVE_VAR_OR_ARRAY标志时才被使用。
        BYTE*	m_pByte;            // SDT_BYTE 数据类型变量的地址,下同。
	    SHORT*	m_pShort;           // SDT_SHORT
	    INT*	m_pInt;             // SDT_INT
	    INT64*	m_pInt64;           // SDT_INT64
	    FLOAT*	m_pFloat;           // SDT_FLOAT
	    DOUBLE*	m_pDouble;          // SDT_DOUBLE
        DATE*   m_pDate;            // SDT_DATE_TIME
        BOOL*   m_pBool;            // SDT_BOOL

        char**  m_ppText;           // SDT_TEXT,注意*m_ppText可能为NULL(代表空文本)。
                                    // 写入新值之前必须释放前值,例句:NotifySys (NRS_MFREE, (DWORD)*m_ppText)。
                                    // !!!不可直接更改*m_ppText所指向的内容,只能释放原指针后设置入NULL(空文本)
                                    // 或使用NRS_MALLOC通知分配的新内存地址指针(下同)。

        LPBYTE* m_ppBin;            // SDT_BIN,注意*m_ppBin可能为NULL(代表空字节集)。
                                    // 写入新值之前必须释放前值,例句:NotifySys (NRS_MFREE, (DWORD)*m_ppBin)。
                                    // !!!不可直接更改*m_ppBin所指向的内容,只能释放原指针后设置入NULL(空字节集)
                                    // 或新指针。

        DWORD*  m_pdwSubCodeAdr;    // SDT_SUB_PTR,子程序代码地址变量地址。
        PMUNIT  m_pUnit;            // 窗口单元、菜单数据类型变量地址。

        void**  m_ppCompoundData;   // 复合数据类型变量地址。
                                    // !!!注意写入新值之前必须使用NRS_MFREE通知逐一释放所有成员(即:SDT_TEXT、
                                    // SDT_BIN及复合数据类型成员)及原地址指针。
                                    // !!!不可直接更改*m_ppCompoundData所指向的内容,只能释放原指针后设置入新指针。

        void**  m_ppAryData;        // 数组数据变量地址,注意:
                                    // 1、写入新值之前必须释放原值,例句:NotifySys (NRS_FREE_ARY,
                                    //    m_dtDataType, (DWORD)*m_ppAryData),注意:此例句只适用于
                                    //    m_dtDataType为系统基本数据类型时的情况,如果为复合数据类型,
                                    //    必须根据其定义信息逐一释放。
                                    // 2、如果为文本或字节集数组,则其中成员的数据指针可能为NULL。
                                    // !!!不可直接更改*m_ppAryData所指向的内容,只能释放原指针后设置入新指针。
    };

    // 1、当用作传递参数数据时,如果该参数具有 AS_RECEIVE_VAR_OR_ARRAY 或
    //    AS_RECEIVE_ALL_TYPE_DATA 标志,且为数组数据,则包含标志 DT_IS_ARY ,
    //    这也是 DT_IS_ARY 标志的唯一使用场合。
    //    DT_IS_ARY 的定义为:
    //      #define	DT_IS_ARY   0x20000000
    // 2、当用作传递参数数据时,如果为空白数据,则为 _SDT_NULL 。
    DATA_TYPE m_dtDataType;
};
typedef MDATA_INF* PMDATA_INF;
// !!! ASSERT (sizeof (MDATA_INF) == sizeof (DWORD) * 3);
// 尺寸必须等于 sizeof (DWORD) * 3 。

#pragma pack (pop, old_value)    // 恢复VC++编译器结构对齐字节数。

//////////////////////////////////////////// 通知用数据结构。

⌨️ 快捷键说明

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