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