易IDE视觉库插件开发文档

插件开发


通用接口


iDraw_IDCall 最低要求版本: v1.0.801

//////////////////////////////////////////////////////////////////////////
// 函数功能: 
//      调用视觉库提供的功能
// 
// 参数:
//      参数1: nCode, 类型: int, 功能编号, IDC_ 开头常量
//      参数2: wParam, 类型: WPARAM, 根据功能传递参数
//      参数3: lParam, 类型: LPARAM, 根据功能传递参数
// 
// 返回值:
//      参考 IDC_ 开头常量的说明
int IDRAW_CALL iDraw_IDCall(int nCode, WPARAM wParam, LPARAM lParam);

iDraw_GetVersion 最低要求版本: v1.0.801

//////////////////////////////////////////////////////////////////////////
// 函数功能: 
//      获取当前支持库的版本号
// 
// 参数:
//      参数1: pMajor, 类型: int*, 接收主版本号指针, 可以为0
//      参数2: pMinor, 类型: int*, 接收次版本号指针, 可以为0
//      参数3: pBuild, 类型: int*, 接收编译版本号指针, 可以为0
// 
// 返回值:
//      返回版本号unicode文本指针
LPCWSTR IDRAW_CALL iDraw_GetVersion(int* pMajor, int* pMinor, int* pBuild);

iDraw_GetVersionA 最低要求版本: v1.0.801

//////////////////////////////////////////////////////////////////////////
// 函数功能: 
//      获取当前支持库的版本号
// 
// 参数:
//      参数1: pMajor, 类型: int*, 接收主版本号指针, 可以为0
//      参数2: pMinor, 类型: int*, 接收次版本号指针, 可以为0
//      参数3: pBuild, 类型: int*, 接收编译版本号指针, 可以为0
// 
// 返回值:
//      返回版本号文本指针
LPCSTR IDRAW_CALL iDraw_GetVersionA(int* pMajor, int* pMinor, int* pBuild);

iDraw_malloc 最低要求版本: v1.1.1111

//////////////////////////////////////////////////////////////////////////
// 函数功能: 
//      获取从支持库里申请内存, 内存是从 iDraw.fne 这个模块里申请的, 内部调用的是 malloc
// 
// 参数:
//      参数1: 申请的尺寸
// 
// 返回值:
//      申请的内存地址, 出错返回0, 申请失败不会抛出异常
void* IDRAW_CALL iDraw_malloc(int size);

iDraw_free 最低要求版本: v1.1.1111

//////////////////////////////////////////////////////////////////////////
// 函数功能: 
//      释放 iDraw_malloc 申请的内存, 这里释放的是 iDraw.fne 这个模块的内存, 内部调用的是 free
//      如果由其他模块去释放 iDraw_malloc 申请的内存, 一般会有一个堆不相同的异常
// 
// 参数:
//      参数1: iDraw_malloc 返回的地址
// 
// 返回值:
//      无返回值
void IDRAW_CALL iDraw_free(void* ptr);

iDraw_GetLastError 最低要求版本: v1.1.1111

//////////////////////////////////////////////////////////////////////////
// 函数功能: 
//      获取最后出错的信息, 返回unicode文本指针
// 
// 参数:
//      无参数
// 
// 返回值:
//      返回错误文本指针
LPCWSTR IDRAW_CALL iDraw_GetLastError();

iDraw_GetLastErrorA 最低要求版本: v1.1.1111

//////////////////////////////////////////////////////////////////////////
// 函数功能: 
//      获取最后出错的信息, 返回ansi文本指针
// 
// 参数:
//      无参数
// 
// 返回值:
//      返回错误文本指针
LPCSTR IDRAW_CALL iDraw_GetLastErrorA();

iDraw_Xml_GetNode 最低要求版本: v1.0.801

//////////////////////////////////////////////////////////////////////////
// 函数功能: 
//      获取xml指定节点, 返回节点指针, 所有读写操作都需要节点指针
// 
// 参数:
//      参数1: lpszNodeName, 类型: LPCWSTR, xml节点名
//      参数2: lpszNodeValue, 类型: LPCWSTR, 节点值文本, 可以为0
//      参数3: isCreate, 类型: BOOL, 节点不存在时是否创建该节点, 可以为0
//      参数4: lpIsNewNode, 类型: BOOL*, 传递一个指针接收返回的节点是否是新创建的, 可以为0
// 
// 返回值:
//      获取到的值
ICTinyXml2_XMLNode IDRAW_CALL iDraw_Xml_GetNode(LPCWSTR lpszNodeName, LPCWSTR lpszNodeValue, BOOL isCreate, BOOL* lpIsNewNode);

iDraw_Xml_GetChildNode 最低要求版本: v1.0.801

//////////////////////////////////////////////////////////////////////////
// 函数功能: 
//      获取xml指定节点下的子节点, 返回节点指针, 所有读写操作都需要节点指针
// 
// 参数:
//      参数1: nodeParent, 类型: ICTinyXml2_XMLNode, xml节点, 如果这个值为0, 则功能与 iDraw_Xml_GetNode() 一样
//      参数2: lpszNodeName, 类型: LPCWSTR, 要获取的子节点节点名, 如果为空则调用失败
//      参数3: lpszNodeValue, 类型: LPCWSTR, 节点值文本, 可以为0
//      参数4: isCreate, 类型: BOOL, 节点不存在时是否创建该节点, 可以为0
//      参数5: lpIsNewNode, 类型: BOOL*, 传递一个指针接收返回的节点是否是新创建的, 可以为0
// 
// 返回值:
//      获取到的值
ICTinyXml2_XMLNode IDRAW_CALL iDraw_Xml_GetChildNode(ICTinyXml2_XMLNode nodeParent, LPCWSTR lpszNodeName, LPCWSTR lpszNodeValue, BOOL isCreate, BOOL* lpIsNewNode);

iDraw_Xml_InsertChildNode 最低要求版本: v1.0.801

//////////////////////////////////////////////////////////////////////////
// 函数功能: 
//      添加子节点到某个节点下, 如果被添加的节点已经存在, 则不会添加, 返回节点指针
// 
// 参数:
//      参数1: pNode, 类型: ICTinyXml2_XMLNode, xml节点指针
//      参数2: lpszNodeName, 类型: LPCWSTR, 要插入的xml节点名
//      参数3: pszNodeValue, 类型: LPCWSTR, 要插入的xml节点值, 可以为0
// 
// 返回值:
//      获取到的值
ICTinyXml2_XMLNode IDRAW_CALL iDraw_Xml_InsertChildNode(ICTinyXml2_XMLNode pNode, LPCWSTR lpszNodeName, LPCWSTR pszNodeValue);

iDraw_Xml_SetAttrValue 最低要求版本: v1.0.801

//////////////////////////////////////////////////////////////////////////
// 函数功能: 
//      设置指定节点属性值
// 
// 参数:
//      参数1: node, 类型: ICTinyXml2_XMLNode, xml节点名
//      参数2: lpszAttrName, 类型: LPCWSTR, 要设置的属性名
//      参数3: lpszAttrValue, 类型: LPCWSTR, 要设置的属性值
// 
// 返回值:
//      获取到的值
bool IDRAW_CALL iDraw_Xml_SetAttrValue(ICTinyXml2_XMLNode node, LPCWSTR lpszAttrName, LPCWSTR lpszAttrValue);

iDraw_Xml_GetAttrValue 最低要求版本: v1.0.801

//////////////////////////////////////////////////////////////////////////
// 函数功能: 
//      获取指定节点属性值, 返回属性值文本指针
// 
// 参数:
//      参数1: node, 类型: ICTinyXml2_XMLNode, xml节点名
//      参数2: lpszAttrName, 类型: LPCWSTR, 要获取的属性名
//      参数3: isAttribute, 类型: BOOL*, 要获取的这个属性是否存在, 可以为0, 如果属性不存在, 这个值为0, 存在则为1
// 
// 返回值:
//      获取到的值
LPCWSTR IDRAW_CALL iDraw_Xml_GetAttrValue(ICTinyXml2_XMLNode node, LPCWSTR lpszAttrName, BOOL* isAttribute);

iDraw_Xml_SetNodeValue 最低要求版本: v1.0.801

//////////////////////////////////////////////////////////////////////////
// 函数功能: 
//      设置指定节点值
// 
// 参数:
//      参数1: node, 类型: ICTinyXml2_XMLNode, xml节点指针
//      参数2: lpszNodeValue, 类型: LPCWSTR, 要设置的节点值
// 
// 返回值:
//      获取到的值
bool IDRAW_CALL iDraw_Xml_SetNodeValue(ICTinyXml2_XMLNode node, LPCWSTR lpszNodeValue);

iDraw_Xml_SaveFile 最低要求版本: v1.0.801

//////////////////////////////////////////////////////////////////////////
// 函数功能: 
//      保存xml到磁盘
// 
// 参数:
//      无参数
// 
// 返回值:
//      获取到的值
bool IDRAW_CALL iDraw_Xml_SaveFile();

iDraw_Xml_GetNodeValue 最低要求版本: v1.0.801

//////////////////////////////////////////////////////////////////////////
// 函数功能: 
//      获取指定节点值, 返回节点值文本指针
// 
// 参数:
//      参数1: node, 类型: ICTinyXml2_XMLNode, xml节点指针
// 
// 返回值:
//      获取到的值
LPCWSTR IDRAW_CALL iDraw_Xml_GetNodeValue(ICTinyXml2_XMLNode node);

iDraw_SubclassWindow 最低要求版本: v1.0.801

//////////////////////////////////////////////////////////////////////////
// 函数功能: 
//      子类化指定窗口, 并设置一些默认的绘画信息, 内部不会对其进行重画
//      支持库所有子类化都是通过这个接口进行二次封装
// 参数:
//      参数1: hWnd, 类型: HWND, 需要子类化的窗口句柄
//      参数2: proc, 类型: pfn_SubClassWndProc, 接收子类化消息回调的函数, 有5个参数, 函数调用约定为 __stdcall, 返回值为 LRESULT 类型
//              前4个参数与普通子类化相同, 最后多的那个参数就是调用这个接口的返回值
//      参数3: reMoveBorder, 类型: bool, 是否需要删除边框, 为true则把边框相关的样式都删除
//      参数4: isSetBack, 类型: bool, 如果为true, 则会调用 SetClassLong() 设置背景画刷, 相同类名的窗口都会受到影响
// 返回值:
//      返回窗口数据, 可以调用 iDraw_SetLong() 对窗口数据进行修改
//      如果需要自己接收消息, 请调用 iDraw_SetLong(窗口数据, IGL_WNDPROC, 回调函数), 可以参考 IGL_WNDPROC 常量说明
LPOBJSTRUCT IDRAW_CALL iDraw_SubclassWindow(HWND hWnd, pfn_SubClassWndProc proc, bool reMoveBorder, bool isSetBack);

iDraw_DrawWindowProc 最低要求版本: v1.2.101

//////////////////////////////////////////////////////////////////////////
// 函数功能: 
//      把窗口的消息转到重画窗口的过程去处理
// 参数:
//      参数1: 需要重画的窗口句柄
//      参数2: 需要处理的消息
//      参数3: 参数1
//      参数4: 参数2
//      参数5: 参数2
//      参数6: 窗口原来处理消息的回调地址
//      参数7: 接收处理完的消息返回值
// 返回值:
//      返回是否处理了这条消息
bool IDRAW_CALL iDraw_DrawWindowProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam, WNDPROC oldProc, LRESULT* pRet);

iDraw_DrawGetDefArg 最低要求版本: v1.2.101

//////////////////////////////////////////////////////////////////////////
// 函数功能: 
//      获取默认参数
// 参数:
//      参数1: 需要重画的窗口句柄, 为0则在返回后自己给窗口句柄赋值
//      参数2: DRAW_STRUCT_WINDOW_ARGUMENT 结构指针, 内部把默认参数填充到这个结构里
// 返回值:
//      返回保存窗口信息的结构指针, 组件的各种配色信息都在这个结构中保存
bool IDRAW_CALL iDraw_DrawGetDefArg(HWND hWnd, LPDRAW_STRUCT_WINDOW_ARGUMENT arg);

iDraw_SubclassWindowEx 最低要求版本: v1.2.101

//////////////////////////////////////////////////////////////////////////
// 函数功能: 
//      把一个顶层窗口重画成与视觉库相同的视觉效果
// 参数:
//      参数1: 需要重画的窗口句柄
//      参数2: DRAW_STRUCT_WINDOW_ARGUMENT 结构指针, 为0则使用与当前主题匹配的配色信息
// 返回值:
//      返回保存窗口信息的结构指针, 组件的各种配色信息都在这个结构中保存
LPOBJSTRUCT IDRAW_CALL iDraw_SubclassWindowEx(HWND hWnd, LPDRAW_STRUCT_WINDOW_ARGUMENT arg);

iDraw_CreateWindow 最低要求版本: v1.2.101

//////////////////////////////////////////////////////////////////////////
// 函数功能: 
//      创建弹出式窗口, 这个窗口和视觉库有相同的视觉效果
// 参数:
//      参数1: 窗口的扩展样式, 详情请参考 CreateWindowEx 的说明
//      参数2: 窗口的标题, 为0则没有标题, unicode文本
//      参数3: 窗口的样式, 详情请参考 CreateWindowEx 的说明
//      参数4: 窗口在屏幕的左边位置
//      参数5: 窗口在屏幕的顶边位置
//      参数6: 窗口宽度
//      参数7: 窗口高度
//      参数8: 父窗口, 如果为0, 则没有父窗口, 如果有则创建的窗口始终在这个窗口之上
//      参数9: DRAW_STRUCT_WINDOW_ARGUMENT 结构指针, 为0则使用与当前主题匹配的配色信息
// 返回值:
//      返回保存窗口信息的结构指针, 组件的各种配色信息都在这个结构中保存
LPOBJSTRUCT IDRAW_CALL iDraw_CreateWindow(DWORD dwExStyle, LPCWSTR lpWindowName, DWORD dwStyle, int x, int y, int cx, int cy, HWND hWndParent, LPDRAW_STRUCT_WINDOW_ARGUMENT arg);

iDraw_Event_Draw 最低要求版本: v1.2.101

//////////////////////////////////////////////////////////////////////////
// 函数功能: 
//      挂接窗口绘画事件, 只有调用 iDraw_SubclassWindowEx, 或者 iDraw_SubclassWindow 的窗口才有效
//      当窗口在绘画 系统图标, 标题, 系统按时, 会触发事件
// 参数:
//      参数1: 有调用过 iDraw_SubclassWindowEx 的窗口句柄, 或者 iDraw_SubclassWindow 返回的窗口句柄
//      参数2: 接收绘画回调的函数, 函数原型 = typedef bool(CALLBACK* PFN_SysDraw)(LPDRAW_PAINTSTRUCT dps);
//      参数3: 传递到回调函数里的参数
// 返回值:
//      返回是否成功
bool IDRAW_CALL iDraw_Event_Draw(HWND hWnd, PFN_SysDraw pfn, LPARAM param);

iDraw_Event_SysButtonClick 最低要求版本: v1.2.101

//////////////////////////////////////////////////////////////////////////
// 函数功能: 
//      挂接系统按钮点击事件, 只有调用 iDraw_SubclassWindowEx, 或者 iDraw_SubclassWindow 的窗口才有效
// 参数:
//      参数1: 有调用过 iDraw_SubclassWindowEx 的窗口句柄, 或者 iDraw_SubclassWindow 返回的窗口句柄
//      参数2: 接收绘画回调的函数, 函数原型 = typedef bool(CALLBACK* PFN_SysBtnClick)(int id, LPARAM btnParam, BOOL isRButton, LPARAM param);
//      参数3: 传递到回调函数里的参数
// 返回值:
//      返回是否成功
bool IDRAW_CALL iDraw_Event_SysButtonClick(HWND hWnd, PFN_SysBtnClick pfn, LPARAM param);

iDraw_AddSysButton 最低要求版本: v1.2.101

//////////////////////////////////////////////////////////////////////////
// 函数功能: 
//      添加系统按钮, 系统按钮索引是从右往左, 只有调用 iDraw_SubclassWindowEx, 或者 iDraw_SubclassWindow 的窗口才有效
// 参数:
//      参数1: 有调用过 iDraw_SubclassWindowEx 的窗口句柄, 或者 iDraw_SubclassWindow 返回的窗口句柄
//      参数2: 按钮的ID, 如果有相同ID, 则替换数值
//      参数3: 按钮数值
// 返回值:
//      返回新增加按钮的索引, 系统按钮索引是从右往左
int IDRAW_CALL iDraw_AddSysButton(HWND hWnd, int id, LPARAM param);

iDraw_DelSysButton 最低要求版本: v1.2.101

//////////////////////////////////////////////////////////////////////////
// 函数功能: 
//      删除系统按钮, 系统按钮索引是从右往左, 只有调用 iDraw_SubclassWindowEx, 或者 iDraw_SubclassWindow 的窗口才有效
// 参数:
//      参数1: 有调用过 iDraw_SubclassWindowEx 的窗口句柄, 或者 iDraw_SubclassWindow 返回的窗口句柄
//      参数2: 要删除的按钮ID
//      参数3: 指明参数2是位置还是ID, DRAW_WND_ 开头常量
// 返回值:
//      返回是否删除成功
bool IDRAW_CALL iDraw_DelSysButton(HWND hWnd, int nPosition, int flags);

iDraw_Event_InsSysButton 最低要求版本: v1.2.101

//////////////////////////////////////////////////////////////////////////
// 函数功能: 
//      插入系统按钮, 系统按钮索引是从右往左, 只有调用 iDraw_SubclassWindowEx, 或者 iDraw_SubclassWindow 的窗口才有效
// 参数:
//      参数1: 有调用过 iDraw_SubclassWindowEx 的窗口句柄, 或者 iDraw_SubclassWindow 返回的窗口句柄
//      参数2: 要插入的位置, -1则插入到最后(最左边), 0则插入到第一个(最右边)
//      参数3: 要插入的按钮ID
//      参数4: 按钮数值
//      参数5: 指明参数2是位置还是ID, DRAW_WND_ 开头常量
// 返回值:
//      返回是否插入成功
int IDRAW_CALL iDraw_Event_InsSysButton(HWND hWnd, int nPosition, int id, LPARAM param, int flags);

iDraw_SetButtonParam 最低要求版本: v1.2.101

//////////////////////////////////////////////////////////////////////////
// 函数功能: 
//      设置系统按钮项目数值, 返回设置前的项目数值
// 参数:
//      参数1: 有调用过 iDraw_SubclassWindowEx 的窗口句柄, 或者 iDraw_SubclassWindow 返回的窗口句柄
//      参数2: 要设置的按钮ID或位置
//      参数3: 按钮数值
//      参数4: 指明参数2是位置还是ID, DRAW_WND_ 开头常量
// 返回值:
//      返回设置前的项目数值
LPARAM IDRAW_CALL iDraw_SetButtonParam(HWND hWnd, int nPosition, LPARAM param, int flags);

iDraw_GetButtonParam 最低要求版本: v1.2.101

//////////////////////////////////////////////////////////////////////////
// 函数功能: 
//      获取系统按钮项目数值
// 参数:
//      参数1: 有调用过 iDraw_SubclassWindowEx 的窗口句柄, 或者 iDraw_SubclassWindow 返回的窗口句柄
//      参数2: 要获取的按钮ID或位置
//      参数3: 指明参数2是位置还是ID, DRAW_WND_ 开头常量
// 返回值:
//      返回按钮的项目数值
LPARAM IDRAW_CALL iDraw_GetButtonParam(HWND hWnd, int nPosition, int flags);

iDraw_CallWindowProc 最低要求版本: v1.0.801

//////////////////////////////////////////////////////////////////////////
// 函数功能: 
//      调用原回调过程
// 参数:
//      参数1: hWnd, 类型: HWND, 窗口句柄, 消息回调里的第一个参数
//      参数2: message, 类型: UINT, 消息值, 消息回调里的第二个参数
//      参数3: wParam, 类型: WPARAM, 参数1, 消息回调里的第三个参数
//      参数4: lParam, 类型: LPARAM, 参数2, 消息回调里的第四个参数
//      参数5: pData, 类型: LPOBJSTRUCT, 组件数据, 消息回调里的第五个参数
// 返回值:
//      返回系统默认处理的返回值
LRESULT IDRAW_CALL iDraw_CallWindowProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam, LPOBJSTRUCT pData);

iDraw_Subclass_Button 最低要求版本: v1.0.801

//////////////////////////////////////////////////////////////////////////
// 函数功能: 
//      子类化并重画按钮, 按钮的类名为 Button
// 参数:
//      参数1: hWnd, 类型: HWND, 按钮的窗口句柄
//      参数2: reMoveBorder, 类型: bool, 是否删除边框
//      参数3: isSetBack, 类型: bool, 如果为true, 则会调用 SetClassLong() 设置背景画刷, 相同类名的窗口都会受到影响
//      参数4: reMoveClassStyle, 类型: DWORD, 需要删除的类样式, 为0则不删除
// 返回值:
//      返回窗口数据, 可以调用 iDraw_SetLong() 对窗口数据进行修改
//      如果需要自己接收消息, 请调用 iDraw_SetLong(窗口数据, IGL_WNDPROC, 回调函数), 可以参考 IGL_WNDPROC 常量说明
LPOBJSTRUCT IDRAW_CALL iDraw_Subclass_Button(HWND hWnd, bool reMoveBorder, bool isSetBack, DWORD reMoveClassStyle);

iDraw_Subclass_Edit 最低要求版本: v1.0.801

//////////////////////////////////////////////////////////////////////////
// 函数功能: 
//      子类化并重画编辑框, 编辑框的类名为 Edit
// 参数:
//      参数1: hWnd, 类型: HWND, 编辑框的窗口句柄
//      参数2: reMoveBorder, 类型: bool, 是否删除边框
//      参数3: isSetBack, 类型: bool, 如果为true, 则会调用 SetClassLong() 设置背景画刷, 相同类名的窗口都会受到影响
//      参数4: reMoveClassStyle, 类型: DWORD, 需要删除的类样式, 为0则不删除
//      参数5: isScroll, 类型: bool, 是否重画滚动条
// 返回值:
//      返回窗口数据, 可以调用 iDraw_SetLong() 对窗口数据进行修改
//      如果需要自己接收消息, 请调用 iDraw_SetLong(窗口数据, IGL_WNDPROC, 回调函数), 可以参考 IGL_WNDPROC 常量说明
LPOBJSTRUCT IDRAW_CALL iDraw_Subclass_Edit(HWND hWnd, bool reMoveBorder, bool isSetBack, DWORD reMoveClassStyle, bool isScroll);

iDraw_Subclass_Static 最低要求版本: v1.0.801

//////////////////////////////////////////////////////////////////////////
// 函数功能: 
//      子类化并重画标签, 标签的类名为 static
// 参数:
//      参数1: hWnd, 类型: HWND, 标签的窗口句柄
//      参数2: reMoveBorder, 类型: bool, 是否删除边框
//      参数3: isSetBack, 类型: bool, 如果为true, 则会调用 SetClassLong() 设置背景画刷, 相同类名的窗口都会受到影响
//      参数4: reMoveClassStyle, 类型: DWORD, 需要删除的类样式, 为0则不删除
// 返回值:
//      返回窗口数据, 可以调用 iDraw_SetLong() 对窗口数据进行修改
//      如果需要自己接收消息, 请调用 iDraw_SetLong(窗口数据, IGL_WNDPROC, 回调函数), 可以参考 IGL_WNDPROC 常量说明
LPOBJSTRUCT IDRAW_CALL iDraw_Subclass_Static(HWND hWnd, bool reMoveBorder, bool isSetBack, DWORD reMoveClassStyle);

iDraw_Subclass_StatusBar 最低要求版本: v1.0.801

//////////////////////////////////////////////////////////////////////////
// 函数功能: 
//      子类化并重画状态条, 状态条的类名为 msctls_statusbar32
// 参数:
//      参数1: hWnd, 类型: HWND, 状态条的窗口句柄
//      参数2: reMoveBorder, 类型: bool, 是否删除边框
//      参数3: isSetBack, 类型: bool, 如果为true, 则会调用 SetClassLong() 设置背景画刷, 相同类名的窗口都会受到影响
//      参数4: reMoveClassStyle, 类型: DWORD, 需要删除的类样式, 为0则不删除
// 返回值:
//      返回窗口数据, 可以调用 iDraw_SetLong() 对窗口数据进行修改
//      如果需要自己接收消息, 请调用 iDraw_SetLong(窗口数据, IGL_WNDPROC, 回调函数), 可以参考 IGL_WNDPROC 常量说明
LPOBJSTRUCT IDRAW_CALL iDraw_Subclass_StatusBar(HWND hWnd, bool reMoveBorder, bool isSetBack, DWORD reMoveClassStyle);

iDraw_Subclass_TreeView 最低要求版本: v1.0.801

//////////////////////////////////////////////////////////////////////////
// 函数功能: 
//      子类化并重画树型框, 树型框的类名为 SysTreeView32
// 参数:
//      参数1: hWnd, 类型: HWND, 树型框的窗口句柄
//      参数2: reMoveBorder, 类型: bool, 是否删除边框
//      参数3: isSetBack, 类型: bool, 如果为true, 则会调用 SetClassLong() 设置背景画刷, 相同类名的窗口都会受到影响
//      参数4: reMoveClassStyle, 类型: DWORD, 需要删除的类样式, 为0则不删除
//      参数5: nItemHeight, 类型: int, 树型框的项目高度
//      参数6: isScroll, 类型: bool, 是否重画树型框的滚动条
//      参数7: isHot, 类型: bool, 是否有热点效果
// 返回值:
//      返回窗口数据, 可以调用 iDraw_SetLong() 对窗口数据进行修改
//      如果需要自己接收消息, 请调用 iDraw_SetLong(窗口数据, IGL_WNDPROC, 回调函数), 可以参考 IGL_WNDPROC 常量说明
LPOBJSTRUCT IDRAW_CALL iDraw_Subclass_TreeView(HWND hWnd, bool reMoveBorder, bool isSetBack, DWORD reMoveClassStyle, int nItemHeight, bool isScroll, bool isHot);

iDraw_Subclass_ListBox 最低要求版本: v1.0.801

//////////////////////////////////////////////////////////////////////////
// 函数功能: 
//      子类化并重画列表框, 列表框的类名为 ListBox
// 参数:
//      参数1: hWnd, 类型: HWND, 列表框的窗口句柄
//      参数2: reMoveBorder, 类型: bool, 是否删除边框
//      参数3: isSetBack, 类型: bool, 如果为true, 则会调用 SetClassLong() 设置背景画刷, 相同类名的窗口都会受到影响
//      参数4: reMoveClassStyle, 类型: DWORD, 需要删除的类样式, 为0则不删除
//      参数5: nItemHeight, 类型: int, 列表框的项目高度
//      参数6: isScroll, 类型: bool, 是否重画滚动条
//      参数7: isHot, 类型: bool, 是否有热点效果
// 返回值:
//      返回窗口数据, 可以调用 iDraw_SetLong() 对窗口数据进行修改
//      如果需要自己接收消息, 请调用 iDraw_SetLong(窗口数据, IGL_WNDPROC, 回调函数), 可以参考 IGL_WNDPROC 常量说明
LPOBJSTRUCT IDRAW_CALL iDraw_Subclass_ListBox(HWND hWnd, bool reMoveBorder, bool isSetBack, DWORD reMoveClassStyle, int nItemHeight, bool isScroll, bool isHot);

iDraw_Subclass_ListView 最低要求版本: v1.0.801

//////////////////////////////////////////////////////////////////////////
// 函数功能: 
//      子类化并重画超级列表框, 超级列表框的类名为 SysListView32
// 参数:
//      参数1: hWnd, 类型: HWND, 超级列表框的窗口句柄
//      参数2: reMoveBorder, 类型: bool, 是否删除边框
//      参数3: isSetBack, 类型: bool, 如果为true, 则会调用 SetClassLong() 设置背景画刷, 相同类名的窗口都会受到影响
//      参数4: reMoveClassStyle, 类型: DWORD, 需要删除的类样式, 为0则不删除
//      参数5: nItemHeight, 类型: int, 超级列表框的项目高度
//      参数6: isScroll, 类型: bool, 是否重画滚动条
//      参数7: isHot, 类型: bool, 是否有热点效果
//      参数8: fmt, 类型: int, 列表对齐方式
// 返回值:
//      返回窗口数据, 可以调用 iDraw_SetLong() 对窗口数据进行修改
//      如果需要自己接收消息, 请调用 iDraw_SetLong(窗口数据, IGL_WNDPROC, 回调函数), 可以参考 IGL_WNDPROC 常量说明
LPOBJSTRUCT IDRAW_CALL iDraw_Subclass_ListView(HWND hWnd, bool reMoveBorder, bool isSetBack, DWORD reMoveClassStyle, int nItemHeight, bool isScroll, bool isHot, int fmt);

iDraw_Subclass_Tool 最低要求版本: v1.0.801

//////////////////////////////////////////////////////////////////////////
// 函数功能: 
//      子类化并重画工具条, 工具条的类名为 ToolbarWindow32
// 参数:
//      参数1: hWnd, 类型: HWND, 工具条的窗口句柄
//      参数2: reMoveBorder, 类型: bool, 是否删除边框
//      参数3: isSetBack, 类型: bool, 如果为true, 则会调用 SetClassLong() 设置背景画刷, 相同类名的窗口都会受到影响
//      参数4: reMoveClassStyle, 类型: DWORD, 需要删除的类样式, 为0则不删除
// 返回值:
//      返回窗口数据, 可以调用 iDraw_SetLong() 对窗口数据进行修改
//      如果需要自己接收消息, 请调用 iDraw_SetLong(窗口数据, IGL_WNDPROC, 回调函数), 可以参考 IGL_WNDPROC 常量说明
LPOBJSTRUCT IDRAW_CALL iDraw_Subclass_Tool(HWND hWnd, bool reMoveBorder, bool isSetBack, DWORD reMoveClassStyle);

iDraw_Subclass_Tab 最低要求版本: v1.0.801

// 函数功能: 
//      子类化并重画选择夹, 选择夹的类名为 SysTabControl32
// 参数:
//      参数1: hWnd, 类型: HWND, 选择夹窗口句柄
//      参数2: reMoveBorder, 类型: bool, 是否删除边框
//      参数3: isSetBack, 类型: bool, 如果为true, 则会调用 SetClassLong() 设置背景画刷, 相同类名的窗口都会受到影响
//      参数4: reMoveClassStyle, 类型: DWORD, 需要删除的类样式, 为0则不删除
// 返回值:
//      返回窗口数据, 可以调用 iDraw_SetLong() 对窗口数据进行修改
//      如果需要自己接收消息, 请调用 iDraw_SetLong(窗口数据, IGL_WNDPROC, 回调函数), 可以参考 IGL_WNDPROC 常量说明
LPOBJSTRUCT IDRAW_CALL iDraw_Subclass_Tab(HWND hWnd, bool reMoveBorder, bool isSetBack, DWORD reMoveClassStyle);

iDraw_Subclass_msctls_updown32 最低要求版本: v1.0.801

//////////////////////////////////////////////////////////////////////////
// 函数功能: 
//      子类化并重画调节器, 调节器的类名为 msctls_updown32
// 参数:
//      参数1: hWnd, 类型: HWND, 调节器的窗口句柄
//      参数2: reMoveBorder, 类型: bool, 是否删除边框
//      参数3: isSetBack, 类型: bool, 如果为true, 则会调用 SetClassLong() 设置背景画刷, 相同类名的窗口都会受到影响
//      参数4: reMoveClassStyle, 类型: DWORD, 需要删除的类样式, 为0则不删除
// 返回值:
//      返回窗口数据, 可以调用 iDraw_SetLong() 对窗口数据进行修改
//      如果需要自己接收消息, 请调用 iDraw_SetLong(窗口数据, IGL_WNDPROC, 回调函数), 可以参考 IGL_WNDPROC 常量说明
LPOBJSTRUCT IDRAW_CALL iDraw_Subclass_msctls_updown32(HWND hWnd, bool reMoveBorder, bool isSetBack, DWORD reMoveClassStyle);

iDraw_Subclass_ComboBox 最低要求版本: v1.0.801

//////////////////////////////////////////////////////////////////////////
// 函数功能: 
//      子类化并重画组合框, 组合框的类名为 ComboBox
// 参数:
//      参数1: hWnd, 类型: HWND, 组合框的窗口句柄
//      参数2: reMoveBorder, 类型: bool, 是否删除边框
//      参数3: isSetBack, 类型: bool, 如果为true, 则会调用 SetClassLong() 设置背景画刷, 相同类名的窗口都会受到影响
//      参数4: reMoveClassStyle, 类型: DWORD, 需要删除的类样式, 为0则不删除
//      参数5: nItemHeight, 类型: int, 组合框的列表表项高度
// 返回值:
//      返回窗口数据, 可以调用 iDraw_SetLong() 对窗口数据进行修改
//      如果需要自己接收消息, 请调用 iDraw_SetLong(窗口数据, IGL_WNDPROC, 回调函数), 可以参考 IGL_WNDPROC 常量说明
LPOBJSTRUCT IDRAW_CALL iDraw_Subclass_ComboBox(HWND hWnd, bool reMoveBorder, bool isSetBack, DWORD reMoveClassStyle, int nItemHeight);

iDraw_DrawScroll 最低要求版本: v1.0.801

//////////////////////////////////////////////////////////////////////////
// 函数功能: 
//      重画指定控件的滚动条, 这个绘画有点问题, 不是所有控件都支持
// 参数:
//      参数1: hWnd, 类型: HWND, 需要重画滚动条的窗口句柄
//      参数2: nListViewItemHeight, 类型: int, 如果是超级列表框, 则这个参数是超级列表框的表项高度, 超列是特别处理
//      参数3: isTreeView, 类型: bool, 如果是树型框, 则为真, 树型框会做特别处理
//      参数4: isCallSetScrollInfo, 类型: bool, 是否调用原函数
// 返回值:
//      返回滚动条对象指针
LPVOID IDRAW_CALL iDraw_DrawScroll(HWND hWnd, int nListViewItemHeight, bool isTreeView, bool isCallSetScrollInfo);

iDraw_BeginPaint 最低要求版本: v1.0.801

//////////////////////////////////////////////////////////////////////////
// 函数功能: 
//      初始化绘画信息, 必须是在 WM_PAINT 消息下调用, 配套的函数是 iDraw_EndPaint()
//      会调用 BeginPaint, 会创建内存DC, 返回内存DC
//      把组件设置的字体颜色, 背景画刷, 边框画笔都选入DC
//      如果 不调用此接口, 也可以按一般处理WM_PAINT消息时处理
// 
// 参数:
//      参数1: pData, 类型: LPOBJSTRUCT, 子类化的第五个参数, 或者是调用子类化接口的返回值
//      参数2: data, 类型: BEGIN_END_PAINT_STRUCT*, BEGIN_END_PAINT_STRUCT 结构指针, 内部会把初始化的数据记录到这个结构中
//      参数3: isDxRender, 类型: bool, 是否为DX渲染, 如果是DX渲染, 则内部会调用DX的初始化函数
//      参数4: isFillBack, 类型: bool, 是否填充背景, 如果为true, 则返回的HDC已经填充好了背景
// 
// 返回值:
//      返回内存DC, DX渲染则返回0
HDC IDRAW_CALL iDraw_BeginPaint(LPOBJSTRUCT pData, BEGIN_END_PAINT_STRUCT* data, bool isDxRender, bool isFillBack);

iDraw_EndPaint 最低要求版本: v1.0.801

//////////////////////////////////////////////////////////////////////////
// 函数功能: 
//      提交绘画信息, 必须是在 WM_PAINT 消息下调用, 调用此函数前必须已经调用了 iDraw_BeginPaint()
//      把iDraw_BeginPaint() 时创建的内存DC拷贝到窗口上
//      并调用 EndPaint 提交绘画信息
// 
// 参数:
//      参数1: data, 类型: BEGIN_END_PAINT_STRUCT*, BEGIN_END_PAINT_STRUCT 结构指针, 此函数会清理该结构的数据
// 
// 返回值:
//      返回是否拷贝成功
bool IDRAW_CALL iDraw_EndPaint(BEGIN_END_PAINT_STRUCT* data);

iDraw_GetDxObject 最低要求版本: v1.0.801

//////////////////////////////////////////////////////////////////////////
// 函数功能: 
//      获取DX绘画对象指针, 一般易语言用不上, 易语言使用 iDraw_ 开头的绘画相关函数
// 
// 参数:
//      无参数
// 
// 返回值:
//      返回dx绘画对象指针
ID2DDraw* IDRAW_CALL iDraw_GetDxObject();

iDraw_InterfaceArgument 最低要求版本: v1.0.801

//////////////////////////////////////////////////////////////////////////
// 函数功能: 
//      获取初始化时的参数
// 
// 参数:
//      参数1: pInfo, 类型: LPIDRAW_INFO*, 提供一个指针, 接收 传入 iDraw_Interface 接口的第一个参数
//      参数2: eWnd, 类型: IGetEWindow**, 提供一个指针, 接收 传入 iDraw_Interface 接口的第二个参数
//      参数3: reserved1, 类型: int*, 提供一个指针, 接收 传入 iDraw_Interface 接口的第三个参数
//      参数4: reserved2, 类型: int*, 提供一个指针, 接收 传入 iDraw_Interface 接口的第四个参数
// 
// 返回值:
//      返回值暂未使用
int IDRAW_CALL iDraw_InterfaceArgument(LPIDRAW_INFO* pInfo, IGetEWindow** eWnd, int* reserved1, int* reserved2);

iDraw_UpdateShadow 最低要求版本: v1.0.801

//////////////////////////////////////////////////////////////////////////
// 函数功能: 
//      重画阴影窗口, 注意: 如果绑定了 IRE_DRAW_BCAKGROUND 这个事件, 调用后会触发这个事件, 请不要在这个事件下调用该接口
// 
// 参数:
//      参数1: bAsync, 类型: bool, 是否异步重画, 如果不需要马上绘画请设置为true, 为true则距离最后一次调用20毫秒后开始重画
// 
// 返回值:
//      返回阴影窗口句柄
HWND IDRAW_CALL iDraw_UpdateShadow(bool bAsync);

iDraw_LoadExtFromFile 最低要求版本: v1.0.801

//////////////////////////////////////////////////////////////////////////
// 函数功能: 
//      从文件加载ires数据, 成功返回资源句柄, 失败返回0
// 
// 参数:
//      参数1: pszFile, 类型: LPCWSTR, ires的文件路径
// 
// 返回值:
//      返回ires文件的资源句柄, 可以使用 User_GetIcon/User_GetIconDx 这两个函数来获取图标
IDRAW_HRESOURCE IDRAW_CALL iDraw_LoadExtFromFile(LPCWSTR pszFile);

iDraw_LoadExtFromMemory 最低要求版本: v1.0.801

//////////////////////////////////////////////////////////////////////////
// 函数功能: 
//      从内存加载ires数据, 成功返回资源句柄, 失败返回0
// 
// 参数:
//      参数1: ptr, 类型: const void*, ires的文件数据
//      参数2: size, 类型: int, 文数据尺寸
// 
// 返回值:
//      返回ires文件的资源句柄, 可以使用 User_GetIcon/User_GetIconDx 这两个函数来获取图标
IDRAW_HRESOURCE IDRAW_CALL iDraw_LoadExtFromMemory(const void* ptr, int size);

iDraw_GetDefControlIcon 最低要求版本: v1.0.801

//////////////////////////////////////////////////////////////////////////
// 函数功能: 
//      获取默认组件的资源句柄, 传递窗口句柄获取
// 
// 参数:
//      参数1: hWnd, 类型: HWND, 从哪个窗口上获取, 现在只有 标准工具条, 程序/支持库/组件箱 树型框这几个有默认图标
// 
// 返回值:
//      返回窗口关联的资源句柄
IDRAW_HRESOURCE IDRAW_CALL iDraw_GetDefControlIcon(HWND hWnd);

iDraw_UnBindWindow 最低要求版本: v1.0.801

//////////////////////////////////////////////////////////////////////////
// 函数功能: 
//      取消插件所有绑定窗口资源的回调
// 
// 参数:
//      参数1: guid, 类型: LPCSTR, 插件唯一标识符
// 
// 返回值:
//      取消绑定成功返回true, 失败返回false
bool IDRAW_CALL iDraw_UnBindWindow(LPCSTR guid);

iDraw_BindWindow 最低要求版本: v1.0.801

//////////////////////////////////////////////////////////////////////////
// 函数功能: 
//      将资源绑定到窗口上, 下次重画这个窗口时会从这个资源获取图标
// 
// 参数:
//      参数1: guid, 类型: LPCSTR, 插件唯一标识符
//      参数2: hWnd, 类型: HWND, 要绑定的窗口句柄
//      参数3: hResource, 类型: IDRAW_HRESOURCE, 加载的资源句柄, 如果这个参数为0, 且最后一个参数为0, 则不会加载设定的图标
//      参数4: callback, 类型: pfn_GetWindowIcon, 回调函数, 当这个窗口需要加载图标时调用, 为0则使用默认的资源加载, 如果没有默认的资源则不加载
//         typedef LPWINDOW_ICON_DATA(IDRAW_CALL* pfn_GetWindowIcon)(
                HWND hWnd,
                IDRAW_HRESOURCE hResource,
                LPCWSTR pszID,
                void* pArg,
                RECT_F* prc,
                STATE state,
                UINT dpi
            );
// 
// 返回值:
//      绑定成功返回true, 失败返回false
bool IDRAW_CALL iDraw_BindWindow(LPCSTR guid, HWND hWnd, IDRAW_HRESOURCE hResource, pfn_GetWindowIcon callback);

iDraw_GetResourceFromHwnd 最低要求版本: v1.0.801

//////////////////////////////////////////////////////////////////////////
// 函数功能: 
//      从窗口句柄获取资源, 如果没有绑定过这个窗口, 则返回0
// 
// 参数:
//      参数1: guid, 类型: LPCSTR, 插件唯一标识符
//      参数2: hWnd, 类型: HWND, 之前绑定的窗口句柄
//      参数3: callback, 类型: pfn_GetWindowIcon*, 接收绑定时传递的回调函数, 可以为0
// 
// 返回值:
//      绑定成功返回true, 失败返回false
IDRAW_HRESOURCE IDRAW_CALL iDraw_GetResourceFromHwnd(LPCSTR guid, HWND hWnd, pfn_GetWindowIcon* callback);

iDraw_GetIcon 最低要求版本: v1.0.801

//////////////////////////////////////////////////////////////////////////
// 函数功能: 
//      从资源句柄里获取图标数据
// 
// 参数:
//      参数1: hResource, 类型: IDRAW_HRESOURCE, 资源句柄, 使用 iDraw_LoadExtFromFile/iDraw_LoadExtFromMemory/iDraw_GetDefControlIcon 返回的值
//      参数2: pszID, 类型: LPCWSTR, 图标ID
//      参数3: prc, 类型: RECT_F*, RECT_F结构指针, 接收这个ID在资源中的位置
//      参数4: state, 类型: int, 要获取的状态, 目前只支持 STATE::HOT, STATE::DOWN, STATE::BAN, STATE::NORMAL 这4个
//      参数5: dpi
// 
// 返回值:
//      返回图标数据, 如果没有图标则返回0
LPWINDOW_ICON_DATA IDRAW_CALL iDraw_GetIcon(IDRAW_HRESOURCE hResource, LPCWSTR pszID, RECT_F* prc, int state, UINT dpi);

iDraw_GetIconDx 最低要求版本: v1.0.801

//////////////////////////////////////////////////////////////////////////
// 函数功能: 
//      从资源句柄里获取图标数据
// 
// 参数:
//      参数1: hResource, 类型: IDRAW_HRESOURCE, 资源句柄, 使用 iDraw_LoadExtFromFile/iDraw_LoadExtFromMemory/iDraw_GetDefControlIcon 返回的值
//      参数2: pszID, 类型: LPCWSTR, 图标ID
//      参数3: prc, 类型: RECT_F*, RECT_F结构指针, 接收这个ID在资源中的位置
//      参数4: state, 类型: int, 要获取的状态, 目前只支持 STATE::HOT, STATE::DOWN, STATE::BAN, STATE::NORMAL 这4个
//      参数5: dpi
// 
// 返回值:
//      返回图标数据, 如果没有图标则返回0
LPWINDOW_ICON_DATA IDRAW_CALL iDraw_GetIconDx(IDRAW_HRESOURCE hResource, LPCWSTR pszID, RECT_F* prc, int state, UINT dpi);

iDraw_GetImageHandle 最低要求版本: v1.1.1111

//////////////////////////////////////////////////////////////////////////
// 函数功能: 
//      从图标数据里获取dx或者gdi+的图片指针, gdi+返回的是 Gdiplus::Bitmap* 指针, dx返回内部使用的图片指针
// 
// 参数:
//      参数1: 图标数据, iDraw_GetIcon 或者 iDraw_MakeResourceReturn 返回的值
//      参数2: 是否返回gdiplus位图句柄, 为true则返回Gdiplus位图句柄, false则返回dx位图句柄
// 
// 返回值:
//      返回位图句柄, 根据第二个参数返回
void* IDRAW_CALL iDraw_GetImageHandle(LPWINDOW_ICON_DATA pIconData, bool isGdiplus);

iDraw_InitPlugin 最低要求版本: v1.0.801

//////////////////////////////////////////////////////////////////////////
// 函数功能: 
//      初始化插件, 只有初始化后才能往扩展菜单里添加菜单项和绑定资源
// 
// 参数:
//      参数1: guid, 类型: LPCSTR, 插件唯一标识符
//      参数2: hModule, 类型: HMODULE, 插件的模块句柄
//      参数3: etInfo, 类型: PLUGIN_INFO*, 插件的插件信息结构指针, 在取消初始化前必须保证这个指针的存活
//      参数4: pfnMenuExt_Command, 类型: pfn_MenuExt_Command, 是否加入扩展菜单, 如果为false, 则调用 iDraw_MenuExt_Insert 会失败
//      参数5: callback, 类型: pfn_IDraw_Callback, 与视觉库通讯的回调函数
// 
// 返回值:
//      返回错误码, 0=成功
bool IDRAW_CALL iDraw_InitPlugin(LPCSTR guid, HMODULE hModule, PLUGIN_INFO* etInfo, pfn_MenuExt_Command pfnMenuExt_Command, pfn_IDraw_Callback callback);

iDraw_UnInitPlugin 最低要求版本: v1.0.801

//////////////////////////////////////////////////////////////////////////
// 函数功能: 
//      取消初始化插件, 把之前初始化时加入到扩展菜单的菜单项删除
// 
// 参数:
//      参数1: guid, 类型: LPCSTR, 插件唯一标识符
// 
// 返回值:
//      返回错误码, 0=成功
bool IDRAW_CALL iDraw_UnInitPlugin(LPCSTR guid);

iDraw_MenuExt_Insert 最低要求版本: v1.0.801

//////////////////////////////////////////////////////////////////////////
// 函数功能: 
//      把菜单项插入到扩展菜单里, 菜单点击事件由 iDraw_InitPlugin 里的回调函数接收
// 
// 参数:
//      参数1: guid, 类型: LPCSTR, 插件唯一标识符
//      参数2: uPosition, 类型: UINT, 加入的位置, -1则加入到最后
//      参数3: uFlags, 类型: UINT, 标识
//      参数4: uIDNewItem, 类型: UINT_PTR, 菜单项ID, 如果uFlags包含MF_POPUP 则这个参数是弹出式的菜单句柄
//      参数5: lpNewItem, 类型: LPCWSTR, 菜单名
//      参数6: param, 类型: LPARAM, 菜单项目数值
// 
// 返回值:
//      返回错误码, 0=成功
bool IDRAW_CALL iDraw_MenuExt_Insert(LPCSTR guid, UINT uPosition, UINT uFlags, UINT_PTR uIDNewItem, LPCWSTR lpNewItem, LPARAM param);

iDraw_GetLong 最低要求版本: v1.0.801

//////////////////////////////////////////////////////////////////////////
// 函数功能: 
//      获取子类化返回的指针的数据, 或者是子类化接收消息回调函数里的第五个参数
// 
// 参数:
//      参数1: pData, 类型: LPOBJSTRUCT, 子类化返回的指针, 或者是子类化接收消息回调函数里的第五个参数
//      参数2: index, 类型: int, 数据索引, 具体请参考 IGL_ 开头常量
// 
// 返回值:
//      获取到的值
LONG_PTR IDRAW_CALL iDraw_GetLong(LPOBJSTRUCT pData, int index);

iDraw_SetLong 最低要求版本: v1.0.801

//////////////////////////////////////////////////////////////////////////
// 函数功能: 
//      设置子类化返回的指针的数据, 或者是子类化接收消息回调函数里的第五个参数, 返回设置前的数据
// 
// 参数:
//      参数1: pData, 类型: LPOBJSTRUCT, 子类化返回的指针, 或者是子类化接收消息回调函数里的第五个参数
//      参数2: index, 类型: int, 数据索引, 具体请参考 IGL_ 开头常量
//      参数3: value, 类型: LONG_PTR, 要设置的数据
// 
// 返回值:
//      返回设置前的值
LONG_PTR IDRAW_CALL iDraw_SetLong(LPOBJSTRUCT pData, int index, LONG_PTR value);

iDraw_CreateBrush 最低要求版本: v1.0.801

//////////////////////////////////////////////////////////////////////////
// 函数功能: 
//      创建画刷, 不允许手动释放, 程序在结束时会释放, 相同颜色的画刷只会创建一次
// 
// 参数:
//      参数1: cr, 类型: COLORREF, 需要创建的画刷, RGB颜色
// 
// 返回值:
//      返回创建好的GDI画刷, 调用此函数创建的画刷不允许手动释放
HBRUSH IDRAW_CALL iDraw_CreateBrush(COLORREF cr);

iDraw_CreateBrushDx 最低要求版本: v1.0.801

//////////////////////////////////////////////////////////////////////////
// 函数功能: 
//      创建画刷, 不允许手动释放, 程序在结束时会释放, 相同颜色的画刷只会创建一次
// 
// 参数:
//      参数1: cr, 类型: DWORD, 需要创建的画刷, ARGB颜色
// 
// 返回值:
//      返回创建好的画刷, 调用此函数创建的画刷不允许手动释放
LPEX_BRUSH IDRAW_CALL iDraw_CreateBrushDx(DWORD cr);

iDraw_CreatePen 最低要求版本: v1.0.801

//////////////////////////////////////////////////////////////////////////
// 函数功能: 
//      创建画笔, 不允许手动释放, 程序在结束时会释放, 相同颜色只会创建一次
// 
// 参数:
//      参数1: style, 类型: int, 需要创建的画刷, ARGB颜色
// 
// 返回值:
//      返回创建好的GDI画刷, 调用此函数创建的画刷不允许手动释放
HPEN IDRAW_CALL iDraw_CreatePen(int style, int width, COLORREF cr);

iDraw_CreatePenDx 最低要求版本: v1.0.801

//////////////////////////////////////////////////////////////////////////
// 函数功能: 
//      创建画笔, 不允许手动释放, 程序在结束时会释放, 相同颜色只会创建一次
// 
// 参数:
//      参数1: style, 类型: int, 需要创建的画刷, ARGB颜色
// 
// 返回值:
//      返回创建好的GDI画刷, 调用此函数创建的画刷不允许手动释放
LPEX_PEN IDRAW_CALL iDraw_CreatePenDx(int style, float width, DWORD cr);

iDraw_CreateFont 最低要求版本: v1.0.801

//////////////////////////////////////////////////////////////////////////
// 函数功能: 
//      创建GDI字体, 不允许手动释放, 程序在结束时会释放, 相同字体只会创建一次
// 
// 参数:
//      参数1: name, 类型: LPCWSTR, 字体名
//      参数2: lfHeight, 类型: int, 字体大小
//      参数3: style, 类型: int, 字体样式, 0=一般, 1=粗体, 2=斜体, 4=下划线, 8=删除线, 多个样式需要或起来
//
// 返回值:
//      返回创建好的GDI字体, 调用此函数创建的字体不允许手动释放
HFONT IDRAW_CALL iDraw_CreateFont(LPCWSTR name, int lfHeight, int style);

iDraw_CreateFontLf 最低要求版本: v1.0.801

//////////////////////////////////////////////////////////////////////////
// 函数功能: 
//      创建GDI字体, 不允许手动释放, 程序在结束时会释放, 相同字体只会创建一次
// 
// 参数:
//      参数1: LPLOGFONTW 结构指针
//
// 返回值:
//      返回创建好的GDI字体, 调用此函数创建的字体不允许手动释放
HFONT IDRAW_CALL iDraw_CreateFontLf(LPLOGFONTW lf);

iDraw_CreateFontDx 最低要求版本: v1.0.801

//////////////////////////////////////////////////////////////////////////
// 函数功能: 
//      创建DX字体, 不允许手动释放, 程序在结束时会释放, 相同字体只会创建一次
// 
// 参数:
//      参数1: name, 类型: LPCWSTR, 字体名
//      参数2: lfHeight, 类型: int, 字体大小
//      参数3: style, 类型: int, 字体样式, 0=一般, 1=粗体, 2=斜体, 4=下划线, 8=删除线, 多个样式需要或起来
//
// 返回值:
//      返回创建好的DX字体, 调用此函数创建的字体不允许手动释放
LPEX_FONT IDRAW_CALL iDraw_CreateFontDx(LPCWSTR name, int lfHeight, int style);

iDraw_CreateFontLfDx 最低要求版本: v1.0.801

//////////////////////////////////////////////////////////////////////////
// 函数功能: 
//      创建DX字体, 不允许手动释放, 程序在结束时会释放, 相同字体只会创建一次
// 
// 参数:
//      参数1: LPLOGFONTW 结构指针
//
// 返回值:
//      返回创建好的DX字体, 调用此函数创建的字体不允许手动释放
LPEX_FONT IDRAW_CALL iDraw_CreateFontLfDx(LPLOGFONTW lf);

iDraw_Event_GetMessageInfo 最低要求版本: v1.0.801

//////////////////////////////////////////////////////////////////////////
// 函数功能: 
// 暂时未对外公开
//      通过窗口句柄和消息值获取该消息绑定的回调
// 
// 参数:
//      参数1: hWnd, 类型: HWND, 窗口句柄
//      参数2: message, 类型: UINT, 注册的消息值
//      参数3: pArr, 类型: LPREGISTER_MESSAGE_INFO*, 缓冲区数组指针, 一个成员占用20个字节
//      参数4: bufSize, 类型: int, 缓冲区数组成员数
// 
// 返回值:
//      返回写入缓冲区成员数
int IDRAW_CALL iDraw_Event_GetMessageInfo(HWND hWnd, UINT message, LPREGISTER_MESSAGE_INFO* pArr, int bufSize);

iDraw_Event_GetEventInfo 最低要求版本: v1.0.801

//////////////////////////////////////////////////////////////////////////
// 函数功能: 
// 暂时未对外公开
//      通过事件ID获取回调信息
// 
// 参数:
//      参数1: nEvent, 类型: UINT, 事件ID
//      参数2: pArr, 类型: LPREGISTER_EVENT_INFO*, 缓冲区数组指针, 一个成员占用24个字节
//      参数3: bufSize, 类型: int, 缓冲区数组成员数
// 
// 返回值:
//      返回写入缓冲区成员数
int IDRAW_CALL iDraw_Event_GetEventInfo(UINT nEvent, LPREGISTER_EVENT_INFO* pArr, int bufSize);

iDraw_Event_RegisterMessage 最低要求版本: v1.0.801

//////////////////////////////////////////////////////////////////////////
// 函数功能: 
//      注册消息回调
// 
// 参数:
//      参数1: guid, 类型: LPCSTR, 插件唯一标识
//      参数2: hWnd, 类型: HWND, 注册哪个窗口的消息, 如果该窗口不存在, 则调用失败
//      参数3: message, 类型: UINT, 注册的消息值, 当窗口触发这个消息时会调用回调函数
//      参数4: pfnBefore, 类型: pfn_SubClassWndProc, 处理前的回调函数, 窗口处理这个消息前调用这个回调函数, 为0则取消挂接这个事件
//      参数5: pfnAfter, 类型: pfn_SubClassWndProc, 处理后的回调函数, 窗口已经处理这个消息后调用这个回调函数, 为0则取消挂接这个事件
//          参数4 和 参数5 的回调原型都是相同的
//              需要5个参数, 整数返回值, 参数数量必须匹配, 否则会导致堆栈不平衡从而导致程序崩溃
//              整数型 回调函数(窗口句柄, 消息值, 参数1, 参数2, 窗口数据指针)
//              与子类化接收消息函数一样
// 
// 返回值:
//      返回错误码, 0=成功
int IDRAW_CALL iDraw_Event_RegisterMessage(LPCSTR guid, HWND hWnd, UINT message, pfn_SubClassWndProc pfnBefore, pfn_SubClassWndProc pfnAfter);

iDraw_Event_RegisterEvent 最低要求版本: v1.0.801

//////////////////////////////////////////////////////////////////////////
// 函数功能: 
//      注册事件回调
// 
// 参数:
//      参数1: guid, 类型: LPCSTR, 唯一标识符
//      参数2: nEvent, 类型: UINT, 需要注册的事件, 会传递到回调函数里
//      参数3: paramBefore, 类型: LONG_PTR, 处理前的回调函数参数, 这个参数会在调用 参数4 时传递过去
//      参数4: pfnBefore, 类型: pfn_Register_Event, 处理前的回调函数, 为0则取消挂接这个事件
//      参数5: paramAfter, 类型: LONG_PTR, 处理后的回调函数参数, 这个参数会在调用 参数6 时传递过去
//      参数6: pfnAfter, 类型: pfn_Register_Event, 处理后的回调函数, 为0则取消挂接这个事件
//          参数4 和 参数6 的回调原型都是相同的
//              需要3个参数, 整数返回值, 参数数量必须匹配, 否则会导致堆栈不平衡从而导致程序崩溃
//              整数型 回调函数(事件类型, 回调参数, 事件指针)
// 
// 返回值:
//      返回错误码, 0=成功
int IDRAW_CALL iDraw_Event_RegisterEvent(LPCSTR guid, UINT nEvent, LONG_PTR paramBefore, pfn_Register_Event pfnBefore, LONG_PTR paramAfter, pfn_Register_Event pfnAfter);

iDraw_UnRegister_Message 最低要求版本: v1.0.801

//////////////////////////////////////////////////////////////////////////
// 函数功能: 
//      取消指定插件的所有消息回调
// 
// 参数:
//      参数1: guid, 类型: LPCSTR, 插件唯一标识符
// 
// 返回值:
//      返回错误码, 0=成功
int IDRAW_CALL iDraw_UnRegister_Message(LPCSTR guid);

iDraw_UnRegister_Event 最低要求版本: v1.0.801

//////////////////////////////////////////////////////////////////////////
// 函数功能: 
//      取消指定插件的所有事件回调
// 
// 参数:
//      参数1: guid, 类型: LPCSTR, 插件唯一标识符
// 
// 返回值:
//      返回错误码, 0=成功
int IDRAW_CALL iDraw_UnRegister_Event(LPCSTR guid);

iDraw_GetInfo 最低要求版本: v1.0.801

//////////////////////////////////////////////////////////////////////////
// 函数功能: 
//      获取pInfo的信息, 接口程序的第一个参数
// 
// 参数:
//      参数1: pInfo, 类型: LPIDRAW_INFO, 接口程序的第一个参数
//      参数2: index, 类型: int, 获取的编号, IGI_ 开头常量
//      参数3: argument, 类型: LPARAM, 获取的参数, 根据编号传递
// 
// 返回值:
//      获取到的值
LONG_PTR IDRAW_CALL iDraw_GetInfo(LPIDRAW_INFO pInfo, int index, LPARAM argument);

iDraw_SetInfo 最低要求版本: v1.0.801

//////////////////////////////////////////////////////////////////////////
// 函数功能: 
//      设置pInfo的信息, 接口程序的第一个参数, 谨慎设置, 这里的配置是全局使用, 一旦出错就会导致崩溃
// 
// 参数:
//      参数1: pInfo, 类型: LPIDRAW_INFO, 接口程序的第一个参数
//      参数2: index, 类型: int, 获取的编号, IGI_ 开头常量
//      参数3: value, 类型: LONG_PTR, 要设置的值
// 
// 返回值:
//      返回设置之前的值
LONG_PTR IDRAW_CALL iDraw_SetInfo(LPIDRAW_INFO pInfo, int index, LONG_PTR value);

iDraw_EWindowThreadCallback 最低要求版本: v1.0.801

//////////////////////////////////////////////////////////////////////////
// 函数功能: 
//      把函数放到易语言窗口线程里调用
// 
// 参数:
//      参数1: pfnCallback, 类型: pfn_EWindowThreadCallback, 函数地址, 没有返回值, 必须没有返回值和一个整数型参数, 否则会堆栈不平衡导致崩溃
//      参数2: param, 类型: LPARAM, 传递到函数里的参数
// 
// 返回值:
//      失败返回0, 成功返回非0值
bool IDRAW_CALL iDraw_EWindowThreadCallback(pfn_EWindowThreadCallback pfnCallback, LPARAM param);

iDraw_MakeResourceReturn 最低要求版本: v1.0.801

//////////////////////////////////////////////////////////////////////////
// 函数功能: 
//      从图片数据里生成资源返回值, 所有指针必须保证存活, 内部不会申请内存来保存传递进来的文本和位图
// 
// 参数:
//      参数1: pImg, 类型: const void*, 图片数据地址
//      参数2: size, 类型: int, 图片数据大小
//      参数3: text, 类型: LPCWSTR, 绘制当前项目显示的文本, 不会修改原组件文本, 只是绘画时显示这个文本, 可以为0
//      参数4: remarks, 类型: LPCWSTR, 备注文本, 可以为0
//      参数5: crText, 类型: DWORD*, 文本ARGB颜色, 可以为0, 不为0则必须是4个成员, 分别是 正常, 热点, 按下, 禁止
//      参数6: crBack, 类型: DWORD*, 背景ARGB颜色, 可以为0, 不为0则必须是4个成员, 分别是 正常, 热点, 按下, 禁止
// 
// 返回值:
//      返回资源返回值, 返回值不使用时必须调用 iDraw_FreeResourceReturn 来释放
LPWINDOW_ICON_DATA IDRAW_CALL iDraw_MakeResourceReturn(const void* pImg, int size, LPCWSTR text, LPCWSTR remarks, DWORD* crText, DWORD* crBack);

iDraw_FreeResourceReturn 最低要求版本: v1.0.801

//////////////////////////////////////////////////////////////////////////
// 函数功能: 
//      释放 iDraw_MakeResourceReturn() 生成的返回值
// 
// 参数:
//      参数1: pData, 类型: LPWINDOW_ICON_DATA, iDraw_MakeResourceReturn() 的返回值
// 
// 返回值:
//      返回是否释放成功
bool IDRAW_CALL iDraw_FreeResourceReturn(LPWINDOW_ICON_DATA pData);

iDraw_LoadGpImageFromMemory 最低要求版本: v1.0.801

//////////////////////////////////////////////////////////////////////////
// 函数功能: 
//      从内存加载gdi+图片
// 
// 参数:
//      参数1: pData, 类型: const void*, 图片数据
//      参数2: size, 类型: int, 图片数据大小
// 
// 返回值:
//      成功返回gdi+图片指针, 失败返回0
void* IDRAW_CALL iDraw_LoadGpImageFromMemory(const void* pData, int size);

iDraw_FreeGpImage 最低要求版本: v1.0.801

//////////////////////////////////////////////////////////////////////////
// 函数功能: 
//      释放从 iDraw_LoadGpImageFromMemory() 返回的值
// 
// 参数:
//      参数1: hImg, 类型: void*, iDraw_LoadGpImageFromMemory() 返回的值
// 
// 返回值:
//      成功返回true, 失败返回false
bool IDRAW_CALL iDraw_FreeGpImage(void* hImg);

iDraw_Tool_InsertButton 最低要求版本: v1.1.1111

//////////////////////////////////////////////////////////////////////////
// 函数功能: 
//      添加按钮到接口工具条中, 成功返回工具条按钮ID, 触发工具条按钮被点击时会把这个ID传递过去
// 
// 参数:
//      参数1: guid, 类型: LPCSTR, 插件唯一标识符, 触发点击/重画事件时会调用这个插件的回调函数
//      参数2: idCommand, 类型: int, 按钮的ID, 触发事件时会把这个ID传递过去
//      参数3: lpszTitle, 类型: LPCWSTR, 按钮标题, 可以为0, 为0则没有标题, 鼠标移动上去时弹出的提示说明标题, 加粗显示, 这个标题不会显示在工具条上
//      参数4: lpszTips, 类型: LPCWSTR, 按钮说明, 可以为0, 为0则没有说明, 鼠标移动上去时弹出的提示说明
//      参数5: param, 类型: LPARAM, 项目数值, 会跟随点击事件传递过去
//      参数6: pImageData, 类型: const void*, 图片数据指针, 这个是显示到工具条上的图标
//      参数7: nImageSize, 类型: int, 图片数据大小
//      参数8: pfnDraw, 类型: pfn_ToolDrawButton, 绘画回调函数, pfn_ToolDrawButton 类型
//              typedef int(IDRAW_CALL* pfn_ToolDrawButton)(LPCANVAS hCanvas, int id, LPARAM param, const RECT_F* prc, STATE state, UINT dpi);
// 返回值:
//      成功返回工具条按钮ID, 失败返回0
int IDRAW_CALL iDraw_Tool_InsertButton(LPCSTR guid, int idCommand, LPCWSTR lpszTitle, LPCWSTR lpszTips, LPARAM param, const void* pImageData, int nImageSize, pfn_ToolDrawButton pfnDraw);

iDraw_Tool_DeleteButton 最低要求版本: v1.1.1111

//////////////////////////////////////////////////////////////////////////
// 函数功能: 
//      删除接口工具条的按钮, 只能删除自己插件添加的按钮
// 
// 参数:
//      参数1: guid, 类型: LPCSTR, 插件唯一标识符, 触发点击/重画事件时会调用这个插件的回调函数
//      参数2: idCommand, 类型: int, 按钮的ID, 添加时的ID
// 
// 返回值:
//      返回是否成功
bool IDRAW_CALL iDraw_Tool_DeleteButton(LPCSTR guid, int idCommand);

iDraw_Tool_GetButtonData 最低要求版本: v1.1.1111

//////////////////////////////////////////////////////////////////////////
// 函数功能: 
//      获取接口工具条的按钮信息, 只能获取自己插件添加的按钮
// 
// 参数:
//      参数1: guid, 类型: LPCSTR, 插件唯一标识符
//      参数2: idCommand, 类型: int, 按钮的ID, 添加时的ID
//      参数3: lpszTitle, 类型: LPWSTR*, 为0则不接收, 接收按钮标题
//      参数4: lpszTips, 类型: LPWSTR*, 为0则不接收, 接收按钮说明
//      参数5: param, 类型: LPARAM*, 为0则不接收, 接收项目数值
//      参数6: pImageData, 类型: LPCVOID*, 为0则不接收, 接收图片数据指针
//      参数7: nImageSize, 类型: int*, 为0则不接收, 接收图片数据大小
//      参数8: pfnDraw, 类型: pfn_ToolDrawButton*, 为0则不接收, 接收绘画回调函数
// 
// 返回值:
//      返回是否成功
bool IDRAW_CALL iDraw_Tool_GetButtonData(LPCSTR guid, int idCommand, LPWSTR* lpszTitle, LPWSTR* lpszTips, LPARAM* param, LPCVOID* pImageData, int* nImageSize, pfn_ToolDrawButton* pfnDraw);

iDraw_Tool_SetButtonData 最低要求版本: v1.1.1111

//////////////////////////////////////////////////////////////////////////
// 函数功能: 
//      设置接口工具条的按钮信息, 只能设置自己插件添加的按钮
// 
// 参数:
//      参数1: guid, 类型: LPCSTR, 插件唯一标识符
//      参数2: idCommand, 类型: int, 按钮的ID, 添加时的ID
//      参数3: lpszTitle, 类型: LPCWSTR, 为0则不设置, 设置按钮标题
//      参数4: lpszTips, 类型: LPCWSTR, 为0则不设置, 设置按钮说明
//      参数5: param, 类型: LPARAM, 为0则不设置, 设置项目数值
//      参数6: pImageData, 类型: const void*, 为0则不设置, 设置图片数据指针
//      参数7: nImageSize, 类型: int, 为0则不设置, 设置图片数据大小
//      参数8: pfnDraw, 类型: pfn_ToolDrawButton, 为0则不设置, 设置绘画回调函数
// 
// 返回值:
//      返回是否成功
bool IDRAW_CALL iDraw_Tool_SetButtonData(LPCSTR guid, int idCommand, LPCWSTR lpszTitle, LPCWSTR lpszTips, LPARAM param, const void* pImageData, int nImageSize, pfn_ToolDrawButton pfnDraw);

iDraw_EIDE_Notify 最低要求版本: v1.1.1111

//////////////////////////////////////////////////////////////////////////
// 函数功能: 
//      调用易语言交互函数, 调用这个函数就相当于调用特殊库的 调用易系统功能() 命令
// 
// 参数:
//      参数1: nMsg, 类型: int, 功能号, 功能号请参考易语言提供的 lib2.h 文件, NES_, NAS_, NRS_ 开头常量
//      参数2: dwParam1, 类型: DWORD, 请参阅 lib2.h 功能号说明
//      参数3: dwParam2, 类型: DWORD, 请参阅 lib2.h 功能号说明
// 
// 返回值:
//      请参阅 lib2.h 功能号说明
int IDRAW_CALL iDraw_EIDE_Notify(int nMsg, DWORD dwParam1, DWORD dwParam2);

iDraw_EIDE_RunFunctions 最低要求版本: v1.1.1111

//////////////////////////////////////////////////////////////////////////
// 函数功能: 
//      调用易语言IDE接口功能, 调用这个函数相当于调用 iDraw_EIDE_Notify(NES_RUN_FUNC, 参数1, 数组[参数2, 参数3]);
// 
// 参数:
//      参数1: nMsg, 类型: int, 功能号, 功能号请参考易语言提供的 PublicIDEFunctions.h 文件, 
//      参数2: dwParam1, 类型: DWORD, 请参阅 PublicIDEFunctions.h 功能号说明
//      参数3: dwParam2, 类型: DWORD, 请参阅 PublicIDEFunctions.h 功能号说明
// 
// 返回值:
//      如果该功能被处理返回真, 未被处理则返回假
bool IDRAW_CALL iDraw_EIDE_RunFunctions(int nMsg, DWORD dwParam1, DWORD dwParam2);

iDraw_STR2RGB 最低要求版本: v1.1.1111

//////////////////////////////////////////////////////////////////////////
// 函数功能: 
//      将一个文本颜色转换成RGB颜色
// 
// 参数:
//      参数1: crDef, 类型: COLORREF, 默认颜色, 调用失败返回这个颜色
//      参数2: lpszColorText, 类型: LPCWSTR, 指向颜色文本指针
// 
// 返回值:
//      返回转换好的RGB颜色值
COLORREF IDRAW_CALL iDraw_STR2RGB(COLORREF crDef, LPCWSTR lpszColorText);

iDraw_STR2ARGB 最低要求版本: v1.1.1111

//////////////////////////////////////////////////////////////////////////
// 函数功能: 
//      将一个文本颜色转换成ARGB颜色
// 
// 参数:
//      参数1: crDef, 类型: ARGB, 默认颜色, 调用失败返回这个颜色
//      参数2: lpszColorText, 类型: LPCWSTR, 指向颜色文本指针
// 
// 返回值:
//      返回转换好的ARGB颜色值
ARGB IDRAW_CALL iDraw_STR2ARGB(ARGB crDef, LPCWSTR lpszColorText);

iDraw_RGB2STR 最低要求版本: v1.1.1111

//////////////////////////////////////////////////////////////////////////
// 函数功能: 
//      将RGB颜色转换成文本 RGB(1,2,3)
// 
// 参数:
//      参数1: crDef, 类型: COLORREF, 要转换的rgb
//      参数2: lpszBuffer, 类型: LPWSTR, 至少20个WCHAR缓冲区指针
// 
// 返回值:
//      返回写入字符数
int IDRAW_CALL iDraw_RGB2STR(COLORREF crDef, LPWSTR lpszBuffer);

iDraw_ARGB2STR 最低要求版本: v1.1.1111

//////////////////////////////////////////////////////////////////////////
// 函数功能: 
//      将RGB颜色转换成文本 ARGB(255,1,2,3)
// 
// 参数:
//      参数1: crDef, 类型: ARGB, 要转换的argb
//      参数2: lpszBuffer, 类型: LPWSTR, 至少26个WCHAR缓冲区指针
// 
// 返回值:
//      返回写入字符数
int IDRAW_CALL iDraw_ARGB2STR(ARGB crDef, LPWSTR lpszBuffer);

iDraw_GetWindowData 最低要求版本: v1.1.1111

//////////////////////////////////////////////////////////////////////////
// 函数功能: 
//      获取窗口数据
// 
// 参数:
//      参数1: hWnd, 类型: HWND, 要获取的窗口句柄
// 
// 返回值:
//      成功返回数据指针, 失败返回0
LPOBJSTRUCT IDRAW_CALL iDraw_GetWindowData(HWND hWnd);

iDraw_GetCodeVisibleRect 最低要求版本: v1.1.1111

//////////////////////////////////////////////////////////////////////////
// 函数功能: 
//      获取代码窗口可视的矩形
// 
// 参数:
//      参数1: prc, 类型: RECT*, 接收矩形的指针(基于易语言主窗口位置)
// 
// 返回值:
//      返回是否获取成功
BOOL IDRAW_CALL iDraw_GetCodeVisibleRect(RECT* prc);

iDraw_InlineHook 最低要求版本: v1.1.1111

//////////////////////////////////////////////////////////////////////////
// 函数功能: 
//      设置InlineHook, 内部提供两种hook方式
// 
// 参数:
//      参数1: pOldFun, 类型: LPVOID, 被hook的地址
//      参数2: pNewFun, 类型: LPVOID, 接收hook的函数地址
//      参数3: hookMode, 类型: int, 使用的hook库, 0=detoursHook, 1=MinHook, 目前只提供这两种
// 
// 返回值:
//      返回被hook地址的原地址, 可以直接调用这个地址
LPVOID IDRAW_CALL iDraw_InlineHook(LPVOID pOldFun, LPVOID pNewFun, int hookMode);

iDraw_UnInlineHook 最低要求版本: v1.1.1111

//////////////////////////////////////////////////////////////////////////
// 函数功能: 
//      设置InlineHook, 内部提供两种hook方式
// 
// 参数:
//      参数1: pOldFun, 类型: LPVOID, iDraw_InlineHook 的返回值
// 
// 返回值:
//      返回是否取消成功
bool IDRAW_CALL iDraw_UnInlineHook(LPVOID pOldFun);

iDraw_CreatePopupMenu 最低要求版本: v1.1.1111

//////////////////////////////////////////////////////////////////////////
// 函数功能: 
//      创建有自绘样式的弹出式菜单, 所有加入到这个弹出式菜单里的子菜单都会被自绘
// 
// 参数:
//      无参数
// 
// 返回值:
//      返回弹出式菜单句柄
HMENU IDRAW_CALL iDraw_CreatePopupMenu();

iDraw_GetCodeManage 最低要求版本: v1.1.1111

//////////////////////////////////////////////////////////////////////////
// 函数功能: 
//      获取IDE代码管理(IEIDE_CodeManage)类指针
// 
// 参数:
//      参数1: hCode, 类型: HWND, 代码窗口窗口句柄, 为0则获取当前窗口
// 
// 返回值:
//      返回代码窗口对应的 IEIDE_CodeManage 类指针, 失败返回0
IEIDE_CodeManage* IDRAW_CALL iDraw_GetCodeManage(HWND hCode);

iDraw_GetCodeWindow 最低要求版本: v1.1.1111

//////////////////////////////////////////////////////////////////////////
// 函数功能: 
//      获取当前代码框句柄, 如果当前是起始页或者设计器窗口则返回0
// 
// 参数:
//      无参数
// 
// 返回值:
//      返回当前代码框句柄, 如果当前是起始页或者设计器窗口则返回0
HWND IDRAW_CALL iDraw_GetCodeWindow();

iDraw_Scroll_GetRect 最低要求版本: v1.1.1111

//////////////////////////////////////////////////////////////////////////
// 函数功能: 
//      获取滚动条位置, 可以通过这个事件修改边框达到指定绘画滚动条位置
// 
// 参数:
//      参数1: pfnCallback, 类型: pfn_GetScrollRect, pfn_GetScrollRect 回调函数
//      参数2: pData, 类型: LPOBJSTRUCT, 窗口数据指针
// 
// 返回值:
//      成功返回非0, 失败返回0
BOOL IDRAW_CALL iDraw_Scroll_GetRect(pfn_GetScrollRect pfnCallback, LPOBJSTRUCT pData);
typedef bool (CALLBACK* pfn_GetScrollRect)(void* pScroll, LPOBJSTRUCT pData, bool isVScroll, RECT* prc);
// pScroll = 滚动条对象
// pData = 滚动条所在的窗口数据
// isVScroll = 是否为纵向滚动条
// prc = 边框的4个边宽高, 修改这个值不会改变窗口的非客户区大小, 只会影响滚动条绘画的尺寸
// prc->left   += 10; 左边边框增加10, 绘画时滚动条左边增加10个像素, 也就是会往右移动10个像素
// prc->top    += 20; 顶边边框增加20, 绘画时滚动条顶边增加10个像素, 也就是会往下移动20个像素
// prc->right  += 30; 右边边框增加30, 绘画时滚动条右边减少30个像素
// prc->bottom += 40; 底边边框增加40, 绘画时滚动条底边减少40个像素
// 左右一般是横向滚动条, 上下一般是纵向滚动条, 根据需要修改
bool IDRAW_CALL pfn_GetScrollRect(void* pScroll, LPOBJSTRUCT pData, bool isVScroll, RECT* prc)
{
  return 0;    // 返回0默认处理, 返回非0则拦截默认处理
}

iDraw_Scroll_CalcRect 最低要求版本: v1.1.1111

//////////////////////////////////////////////////////////////////////////
// 函数功能: 
//      计算滚动条位置, 可以通过这个事件修改窗口非客户区位置
// 
// 参数:
//      参数1: pfnCallback, 类型: pfn_CalcScroll, pfn_CalcScroll 回调函数
//      参数2: pData, 类型: LPOBJSTRUCT, 窗口数据指针
// 
// 返回值:
//      成功返回非0, 失败返回0
BOOL IDRAW_CALL iDraw_Scroll_CalcRect(pfn_CalcScroll pfnCallback, LPOBJSTRUCT pData);
typedef bool (CALLBACK* pfn_CalcScroll)(void* pScroll, LPOBJSTRUCT pData, RECT* prc);
// pScroll = 滚动条对象
// pData = 滚动条所在的窗口数据
// prc = WM_NCCALCSIZE 消息下 NCCALCSIZE_PARAMS 结构的 rgrc[0]
// LPNCCALCSIZE_PARAMS P = (LPNCCALCSIZE_PARAMS)lParam;
// prc = &p->rgrc[0]; prc 就是这个值, 需要对窗口的非客户区进行修改可以参考 WM_NCCALCSIZE 消息说明
// prc->left   += 50; 左边非客户区加宽50, 左边框+50
// prc->top    += 60; 顶边非客户区加宽60, 顶边框+60
// prc->right  -= 70; 右边非客户区加宽70, 右边框+70
// prc->bottom -= 80; 底边非客户区加高80, 底边框+80
bool IDRAW_CALL pfn_CalcScroll(void* pScroll, LPOBJSTRUCT pData, RECT* prc)
{
  return 0;    // 返回0默认处理, 返回非0则拦截默认处理
}

iDraw_Scroll_Draw 最低要求版本: v1.1.1111

//////////////////////////////////////////////////////////////////////////
// 函数功能: 
//      绘画滚动条
// 
// 参数:
//      参数1: pfnCallback, 类型: pfn_DrawScroll, pfn_DrawScroll 回调函数
//      参数2: pData, 类型: LPOBJSTRUCT, 窗口数据指针
// 
// 返回值:
//      成功返回非0, 失败返回0
BOOL IDRAW_CALL iDraw_Scroll_Draw(pfn_DrawScroll pfnCallback, LPOBJSTRUCT pData);
typedef bool (CALLBACK* pfn_DrawScroll)(void* pScroll, LPOBJSTRUCT pData, bool isVScroll, HDC hdc, int type, RECT_F* rcDraw);
// pScroll = 滚动条对象
// pData = 滚动条所在的窗口数据
// isVScroll = 是否为纵向滚动条
// hdcWindow = 滚动条的绘画DC
// type = SCROLL_DRAWTYPE 枚举常量, 表示当前的绘画阶段
// rcDraw = 滚动条默认绘画的位置
bool IDRAW_CALL pfn_DrawScroll(void* pScroll, LPOBJSTRUCT pData, bool isVScroll, HDC hdcWindow, int type, RECT_F* rcDraw)
{
  return false;    // 返回true则拦截绘画, 返回false则内部继续绘画
}

iDraw_GetMDIClientType 最低要求版本: v1.1.1111

//////////////////////////////////////////////////////////////////////////
// 函数功能: 
//      获取当前MDIClient 窗口下是显示什么窗口
//      -1=没有窗口, 0=代码区, 1=设计器窗口, 2=起始页, 高位是窗口类型, 0=未知, 1=窗口设计器, 2=普通程序集, 3=窗口程序集, 4=类, 5=全局变量, 6=数据类型, 7=DLL目录定义表, 8=常量, 9=图片资源, 10=声音资源
// 
// 参数:
//      无参数
// 
// 返回值:
//      返回以下值之一: -1=没有窗口, 0=代码区, 1=设计器窗口, 2=起始页, 高位是窗口类型, 0=未知, 1=窗口设计器, 2=普通程序集, 3=窗口程序集, 4=类, 5=全局变量, 6=数据类型, 7=DLL目录定义表, 8=常量, 9=图片资源, 10=声音资源
int IDRAW_CALL iDraw_GetMDIClientType();

iDraw_GetMDIClientCodeType 最低要求版本: v1.1.1111

//////////////////////////////////////////////////////////////////////////
// 函数功能: 
//      获取当前MDIClient 窗口下是显示什么窗口类型
//      0=未知, 1=窗口设计器, 2=普通程序集, 3=窗口程序集, 4=类, 5=全局变量, 6=数据类型, 7=DLL目录定义表, 8=常量, 9=图片资源, 10=声音资源
// 
// 参数:
//      无参数
// 
// 返回值:
//      返回以下值之一: 0=未知, 1=窗口设计器, 2=普通程序集, 3=窗口程序集, 4=类, 5=全局变量, 6=数据类型, 7=DLL目录定义表, 8=常量, 9=图片资源, 10=声音资源
int IDRAW_CALL iDraw_GetMDIClientCodeType();

iDraw_GetScrollData 最低要求版本: v1.1.1111

//////////////////////////////////////////////////////////////////////////
// 函数功能: 
//      获取滚动条对象数据
// 
// 参数:
//      参数1: pScroll, 类型: LPVOID, 滚动条对象指针
//      参数2: ptr, 类型: IDRAW_STRUCT_SCROLL_DATA*, 接收滚动条数据指针, 调用前需要把 IDRAW_STRUCT_SCROLL_DATA.cbSize 赋值
// 
// 返回值:
//      返回是否成功
BOOL IDRAW_CALL iDraw_GetScrollData(LPVOID pScroll, IDRAW_STRUCT_SCROLL_DATA* ptr);

页面列表

ITEM_HTML