/*
TLXLabelPaint
LabelShop API 开发接口
V 5.21
2017-01-20
京成云马（北京）科技有限公司
http://www.360Code.com
*/

#if !defined(AFX_TLXLABELPAINT_H)
#define AFX_TLXLABELPAINT_H

#pragma comment(lib,"TLXLabelPaint.lib")
#pragma message("Automatically linking with TLXLabelPaint.lib") 

/*
所有函数返回值：
	int
		函数调用成功返回：TLXLP_OK	0
		其它值：错误代码，请参考 TLXLabelPaintType.h 

返回的字符串指针：
	一些函数会返回指向字符串的指针，此类指针的内存由DLL负责分配和释放，用户无需进行管理

UNICODE 和 MBCS
	所有涉及到字符串的函数，均提供 UNICODE 和 MBCS 两个版本
*/

/*
TLXInitLibrary
功能：初始化库
参数：无
说明：
	使用 LabelShop API 前，必需进行初始化。几个主要的函数调用时，也会自动初始化DLL。
	由于初始化DLL需要一定的时间，建议在程序启动时主动初始化，以保证其它函数的响应时间
*/
int AFX_API_EXPORT WINAPI TLXInitLibrary();

/*
TLXSetLicense
功能：通过授权密钥对函数库进行授权
参数：
	lpszLicense		授权密钥
说明：
	可以使用LabelShop企业版密钥，直接对接口进行授权，避免对每台电脑进行单独的授权。
	使用未授权的接口打印标签时，标签上会被加入一行标记文字
*/
int AFX_API_EXPORT WINAPI TLXSetLicenseW(LPCWSTR lpszLicense);
int AFX_API_EXPORT WINAPI TLXSetLicenseA(LPCSTR lpszLicense);

/*
TLXGetLicense
功能：获取函数库的授权状态
参数：
	license		返回函数库授权状态
		授权状态为以下值：
		TLXLP_LICENSE_NONE				0	未授权
		TLXLP_LICENSE_BASIC				1	标准版授权
		TLXLP_LICENSE_PROFESSIONAL		2	专业版授权
		TLXLP_LICENSE_ENTERPRISE		3	企业版授权
说明：
	此接口检查当前DLL的授权状态
*/
int AFX_API_EXPORT WINAPI TLXGetLicense(int* license);

/*
TLXEnableLogInfo
TLXDisableLogInfo
功能：开启或者禁止程序记录日志信息
参数：无
说明：
	为了便于程序调试和查找错误，可以开启或者禁用程序日志
	开启日志后，接口程序会在PC桌面上生成一个日志文件，记录程序运行的一些信息
	请注意：
		正式版本的接口是不支持日志功能的，只有为开发人员提供的专门的测试版本才支持日志功能
		如果您在使用接口的过程中遇到一些无法解决的问题，请联系京成云马技术人员
		如果有必要，技术人员会提供针对特定问题的测试版本，并支持相应的日志输出
		使用这个测试版本并开启日志功能后，接口会记录相关的日志信息，用于分析程序错误
*/
int AFX_API_EXPORT WINAPI TLXEnableLogInfo();
int AFX_API_EXPORT WINAPI TLXDisableLogInfo();

/*
TLXEnablePrintStatus
TLXDisablePrintStatus
功能：开启或者禁止程序显示打印状态对话框
参数：无
说明：
	对于一些耗时的打印任务，可能需要一个进度指示窗口来显示打印进度
	在默认的情况下，当一次打印的标签数量超过10个时，就会显示打印进度窗口
	可以通过这两个接口直接打开或者关闭打印进度窗口显示
	当调用这两个函数后，所有打印任务的进度窗口显示都会受到影响，不再有10个标签数量限制
	一个特殊的情况是当使用 LabelShop 内置打印机驱动进行打印时，打印进度窗口总会被显示，
	不能通过接口打开或者关闭，也没有标签数量的限制
*/
int AFX_API_EXPORT WINAPI TLXEnablePrintStatus();
int AFX_API_EXPORT WINAPI TLXDisablePrintStatus();

/*
TLXGetDocumentLevel
功能：获取文档的授权等级
参数：
	handle		文档句柄
	level		返回文档授权等级
		文档授权等级为以下值：
		TLXLP_DOCUMENT_UNAUTHORIZED		0	未授权的标签模板
		TLXLP_DOCUMENT_AUTHORIZED		1	已授权的标签模板
说明：
	企业版本密钥授权状态下，使用打印接口二只能打印已授权的标签模板，因此在实际使用中，可能需要检查标签模板的授权等级
*/
int AFX_API_EXPORT WINAPI TLXGetDocumentLevel(int handle, int* level);

/*
TLXOpenDocument
功能：打开标签模板文档
参数：
	lpszFileName	文件名
	handle			返回文档句柄
说明：
	对标签模板进行操作前，需要打开标签模板，其它操作通过模板的句柄进行
*/
int AFX_API_EXPORT WINAPI TLXOpenDocumentW(LPCWSTR lpszFileName, int* handle);
int AFX_API_EXPORT WINAPI TLXOpenDocumentA(LPCSTR lpszFileName, int* handle);

/*
TLXOpenDocumentXML
功能：打开标签模板
参数：
	lpszXML			标签模板XML字符串
	handle			返回文档句柄
	bOpenDatabase	是否同时打开文档中连接的数据库
说明：
	此接口可以直接打开XML格式的标签文档，使用XML格式文档便于网络传输和存储
*/
int AFX_API_EXPORT WINAPI TLXOpenDocumentXMLW(LPCWSTR lpszXML, int* handle, bool bOpenDatabase = true);
int AFX_API_EXPORT WINAPI TLXOpenDocumentXMLA(LPCSTR lpszXML, int* handle, bool bOpenDatabase = true);

/*
TLXGetDocumentXML
功能：获取文档XML
参数：
	handle		文档句柄
	ppszXML		返回文档的XML
说明：
	获取XML格式的文档
	返回的是XML字符串指针，内存由接口进行管理，用户无需释放内存
*/
int AFX_API_EXPORT WINAPI TLXGetDocumentXMLW(int handle, LPCWSTR* ppszXML);
int AFX_API_EXPORT WINAPI TLXGetDocumentXMLA(int handle, LPCSTR* ppszXML);

/*
TLXSaveDocument
功能：保存标签模板文档
参数：
	handle			文档句柄
说明：
	只有使用TLXOpenDocument打开的文档，才能使用此接口保存文档，保存时使用原来的文件路径
*/
int AFX_API_EXPORT WINAPI TLXSaveDocument(int handle);

/*
TLXSaveAsDocument
功能：换名保存标签模板文档
参数：
	handle			文档句柄
	lpszPathName	文件名
说明：
	换名保存标签模板文档，支持TLXOpenDocumentXML打开的文档
*/
int AFX_API_EXPORT WINAPI TLXSaveAsDocumentW(int handle, LPCWSTR lpszPathName);
int AFX_API_EXPORT WINAPI TLXSaveAsDocumentA(int handle, LPCSTR lpszPathName);

/*
TLXCloseDocument
功能：关闭标签模板文档
参数：
	handle			文档句柄
说明：
	使用完毕的文档，可以使用此函数关闭。DLL卸载时，会自动关闭所有打开的文档
*/
int AFX_API_EXPORT WINAPI TLXCloseDocument(int handle);

/*
TLXSetNamedVariable
功能：设置模板中命名变时的值
参数：
	handle			文档句柄
	lpszVarName		变量共享名称
	lpszNewValue	变量值
说明：
	命名变量即具有共享变时名称的变量，在打印前可以通过此函数直接设置变量的值
*/
int AFX_API_EXPORT WINAPI TLXSetNamedVariableW(int handle, LPCWSTR lpszVarName,LPCWSTR lpszNewValue);
int AFX_API_EXPORT WINAPI TLXSetNamedVariableA(int handle, LPCSTR lpszVarName,LPCSTR lpszNewValue);

/*
TLXGetNamedVarNames
功能：获取命名变量列表
参数：
	handle			文档句柄
	ppszVarNames	变量名称列表，名称间用 \n 分隔
说明：
	此接口可以获取标签文档中所有命名变量的名称
*/
int AFX_API_EXPORT WINAPI TLXGetNamedVarNamesW(int handle, LPCWSTR* ppszVarNames);
int AFX_API_EXPORT WINAPI TLXGetNamedVarNamesA(int handle, LPCSTR* ppszVarNames);

/*
TLXGetNamedVarValue
功能：获取模板中命名变时的值
参数：
	handle			文档句柄
	lpszVarName		变量共享名称
	ppszVarValue	变量值
说明：
	此接口函数可以获取到命名变量当前的值
*/
int AFX_API_EXPORT WINAPI TLXGetNamedVarValueW(int handle, LPCWSTR lpszVarName, LPCWSTR* ppszVarValue);
int AFX_API_EXPORT WINAPI TLXGetNamedVarValueA(int handle, LPCSTR lpszVarName, LPCSTR* ppszVarValue);

/*
TLXOutputLabel
功能：输出标签模板
参数：
	handle		文档句柄
	copy		每个标签的拷贝数
	bAutoClose	打印后自动关闭打印窗口
说明：
	打印接口一
	此打印接口无需授权即可使用，打印时会弹出一个打印窗口，一次只能打印一个标签的多个拷贝
*/
int AFX_API_EXPORT WINAPI TLXOutputLabel(int handle, int copy, bool bAutoClose);

/*
TLXOutputDocument
功能：输出标签模板
参数：
	handle		文档句柄
	qty			标签个数
	copy		每个标签的拷贝数
	err			当出现授权错误时的处理方式
		err 取值
		0	授权不符时，输出标签，但是标签上会包含额外的标记
		1	授权不符时，不输出标签
		2	授权不符时，给出提示，用户选择是否输出标签，如果希望尽量避免输出带额外标记的标签，可以用这个方法提供用户选择的机会
说明：
	打印接口二
	此打印接口可以打印多个连续变化的标签
	此打印接口需要授权才可以正常使用
	非授权的模式下，每张打印输出的标签上会被加上一行标记文字
	在企业版密钥授权模式下，只能打印已授权的标签模板

不同的授权方式打印不同等级的标签模板时，是否会被加入额外标记的关系如下：

               无授权      标准版授权     专业版本授权    企业版授权
未授权的模板     标记        标记            无             标记
已授权的模板     标记        标记            无             无

使用付费版本的LabelShop编辑并保存的模板是已授权的模板，付费的版本包括LabelShop专业版和企业版
使用免费的LabelShop以及OEM版本的LabelShop编辑保存的标签模板，是未授权的模板
*/
int AFX_API_EXPORT WINAPI TLXOutputDocument(int handle, int qty, int copy, int err);

/*
TLXOutputDocument
功能：预览输出标签模板
参数：
	与 TLXOutputDocument 相同
说明：
	此接口提供打印预览功能
*/
int AFX_API_EXPORT WINAPI TLXPreviewDocument(int handle, int qty, int copy, int err);

/*
TLXGetPrinterName
功能：获取模板目标打印机的名称
参数：
	handle			文档句柄
	ppszPrinter		返回打印机名称
说明：
	此接口函数用于获取模板当前目标打印机的名称
	标签模板中保存了目标打印机，并在该打印机上进行输出
	如果系统中不存在标签模板中的目标打印机，接口会自动分配一台当前系统中的打印机
	打印机的分配原则是：首先会寻找一台类似的打印机（标签打印机或者页式打印机）进行分配，
	如果没有匹配的打印机，由选择系统默认打印机
*/
int AFX_API_EXPORT WINAPI TLXGetPrinterNameW(int handle, LPCWSTR* ppszPrinter);
int AFX_API_EXPORT WINAPI TLXGetPrinterNameA(int handle, LPCSTR* ppszPrinter);

/*
TLXSetPrinterName
功能：设置模板目标打印机
参数：
	handle			文档句柄
	lpszPrinter		目标打印机名称
说明：
	在当前系统中不存在模板中保存的目标打印机时，接口DLL会随机分配一台打印机
	因此建议在打印前，主动设置用于输出的目标打印机
*/
int AFX_API_EXPORT WINAPI TLXSetPrinterNameW(int handle, LPCWSTR lpszPrinter);
int AFX_API_EXPORT WINAPI TLXSetPrinterNameA(int handle, LPCSTR lpszPrinter);

/*
TLXPrinterProperties
功能：设置打印机属性
参数：
	handle		文档句柄
	hWnd		窗口句柄，做为打印机属性窗口的父窗口
说明：
	弹出打印机属性对话框，供用户设置打印机的参数。参数会对其后的打印输出产生影响
*/
int AFX_API_EXPORT WINAPI TLXPrinterProperties(int handle, HWND hWnd);

/*
TLXSetPrinterRotate180
功能：设置文档打印输出时是否旋转180度输出
参数：
handle		文档句柄
rorate		是否旋转， 0 - 不旋转， 非 0 旋转180度
说明：
在打印输出标签时，强制版面旋转180度输出
*/
int AFX_API_EXPORT WINAPI TLXSetPrinterRotate180(int handle, int rotate);

/*
TLXGetPrinterRotate180
功能：获取文档打印输出时是否旋转180度输出
参数：
handle		文档句柄
rorate		返回是否旋转180度， 0 - 不旋转， 非 0 旋转180度
说明：
获取文档在打印输出标签时，是否强制版面旋转180度输出
*/
int AFX_API_EXPORT WINAPI TLXGetPrinterRotate180(int handle, int* rotate);

/*
TLXGetSysPrinterNames
功能：获取系统中安装的打印机列表
参数：
ppszPrinterNames	打印机名称列表，名称间用 \n 分隔
说明：
此接口可以获取系统中安装的打印机列表，包括 LabelShop 支持的无驱动打印机
*/
int AFX_API_EXPORT WINAPI TLXGetSysPrinterNamesW(LPCWSTR* ppszPrinterNames);
int AFX_API_EXPORT WINAPI TLXGetSysPrinterNamesA(LPCSTR* ppszPrinterNames);

/*
TLXGetThumbnail
功能：获取标签略图
参数：
	handle		文档句柄
	pBit		略图句柄
	cx			略图的尺寸（像素点）
说明：
	此接口用于获取标签模板的略图，略图长度和宽度一致
*/
int AFX_API_EXPORT WINAPI TLXGetThumbnail(int handle, HBITMAP* pBit, UINT cx);

/*
TLXGetThumbnailEx
功能：获取标签略图
参数：
	handle		文档句柄
	pBit		略图句柄
	cx			略图的宽度（像素点）
	cy			略图的高度（像素点）
	option		可选属性
		option 可以是以下值的组合
			TLXLP_THUMB_RECTLABELFRAME		0x00000001	画直角边框
			TLXLP_THUMB_CUTLABELFRAME		0x00000002	标签略图仅画标签内部的部分
			TLXLP_THUMB_WORKSPACECOLOR		0x00000004	使用系统工作区背景色，而非白色背景
	varid		保留，固定为 0
说明：
	此接口可以通过参数，控制获取到的略图的属性
*/
int AFX_API_EXPORT WINAPI TLXGetThumbnailEx(int handle, HBITMAP* pBit, UINT cx, UINT cy, int option, int varid);

/*
TLXGetDocumentFormat
功能：获取文档的标签布局格式
参数：
	handle		文档句柄
	hWnd		窗口句柄，做为打印机属性窗口的父窗口
	type		返回标签的类型
		type 值
			TLXLP_LABELTYPE_ROLL			0		卷筒标签
			TLXLP_LABELTYPE_PAGE			1		A4页式标签
	width		标签宽度，单位 1/100 毫米
	width		标签宽度，单位 1/100 毫米
	cols		标签列数
	rows		标签行数
说明：
	获取标签的版面排列信息，可以用来提示用户选择正确的标签纸
*/
int AFX_API_EXPORT WINAPI TLXGetDocumentFormat(int handle, int* type, int* width, int* height, int* cols, int* rows);

/*
TLXEditTemplate
功能：调用LabelShop编辑标签模板
参数：
	lpszTemplateName		模板文件名
说明：
	调用LabelShop编辑标签模板文档
	专业版模式的标签文档，只能由专业版的LabelShop进行编辑
*/
int AFX_API_EXPORT WINAPI TLXEditTemplateW(LPCWSTR lpszTemplateName);
int AFX_API_EXPORT WINAPI TLXEditTemplateA(LPCSTR lpszTemplateName);

/*
TLXEditTemplateXML
功能：调用LabelShop编辑标签模板
参数：
	lpszXML		模板XML
	ppszNewXML	编辑完成的XML
说明：
	调用LabelShop编辑标签模板文档
	专业版模式的标签文档，只能由专业版的LabelShop进行编辑
*/
int AFX_API_EXPORT WINAPI TLXEditTemplateXMLW(LPCWSTR lpszXML, LPCWSTR* ppszNewXML);
int AFX_API_EXPORT WINAPI TLXEditTemplateXMLA(LPCSTR lpszXML, LPCSTR* ppszNewXML);

/*
TLXAfterPrintChange
功能：更新变量的内容
参数：
	handle		文档句柄
	qty			标签打印数量
	copy		单个标签拷贝数
	option		保留，固定为0
说明：
	在序列化打印时，使用此接口可以在打印后更新序列化对象的内容
*/
int AFX_API_EXPORT WINAPI TLXAfterPrintChange(int handle, int qty, int copy, int option);

/*
TLXSetLabelOffect
功能：设置标签偏移
参数：
	handle		文档句柄
	x			水平方向偏移，单位 1/100 毫米
	y			垂直方向偏移，单位 1/100 毫米
说明：
	此接口可以在一定的范围内微调模板上的对象在标签纸上的打印位置
	受到打印机的限制，调整只能在一定的范围内进行
*/
int AFX_API_EXPORT WINAPI TLXSetLabelOffect(int handle, int x, int y);

/*
TLXNamedVarsClearData
功能：清空命名变量数据集
参数：
	handle		文档句柄
说明：
	命名变量数据集用于为打印接口设置多条数据，并一次性打印
	当使用 TLXSetNamedVariable 设置命令变量数据时，只能为一个标签设置数据
	如果希望一次性设置多条数据，则需要使用 命名变量数据集
	此接口用于清空已经设置的命名变量数据集中的数据，以便重新设置数据，并进行下一次打印
*/
int AFX_API_EXPORT WINAPI TLXNamedVarsClearData(int handle);

/*
TLXNamedVarsAddVarData
功能：设置命名变量数据集数据
参数：
	handle		文档句柄
	row			记录行号，从 0 开始
	lpszVarName	命名变量名称
	lpszVarData 命名变量数据
说明：
	为命名变量数据集设置数据时，我们建议从 0行 开始逐条设置数据
	每记录行中的变量数据数量和顺序请保持一致
	随意设置数据可能不会影响打印，但是可能会产生不可预期的打印效果
*/
int AFX_API_EXPORT WINAPI TLXNamedVarsAddVarDataW(int handle, int row, LPCWSTR lpszVarName, LPCWSTR lpszVarData);	//	增加一个变量字段值
int AFX_API_EXPORT WINAPI TLXNamedVarsAddVarDataA(int handle, int row, LPCSTR lpszVarName, LPCSTR lpszVarData);	//	增加一个变量字段值

/*查找记录*/
int AFX_API_EXPORT WINAPI TLXSearchRecordW(int handle, LPCWSTR lpszKey);
int AFX_API_EXPORT WINAPI TLXSearchRecordA(int handle, LPCSTR lpszKey);


#ifdef UNICODE
#define TLXSetLicense			TLXSetLicenseW
#define TLXOpenDocument			TLXOpenDocumentW
#define TLXOpenDocumentXML		TLXOpenDocumentXMLW
#define TLXGetDocumentXML		TLXGetDocumentXMLW
#define TLXSaveAsDocument		TLXSaveAsDocumentW
#define TLXSetNamedVariable		TLXSetNamedVariableW
#define TLXGetNamedVarNames		TLXGetNamedVarNamesW
#define TLXGetNamedVarValue		TLXGetNamedVarValueW
#define TLXGetPrinterName		TLXGetPrinterNameW
#define TLXSetPrinterName		TLXSetPrinterNameW
#define TLXGetSysPrinterNames	TLXGetSysPrinterNamesW
#define TLXEditTemplate			TLXEditTemplateW
#define TLXEditTemplateXML		TLXEditTemplateXMLW
#define TLXNamedVarsAddVarData	TLXNamedVarsAddVarDataW
#define TLXSearchRecord			TLXSearchRecordW
#else
#define TLXSetLicense			TLXSetLicenseA
#define TLXOpenDocument			TLXOpenDocumentA
#define TLXOpenDocumentXML		TLXOpenDocumentXMLA
#define TLXGetDocumentXML		TLXGetDocumentXMLA
#define TLXSaveAsDocument		TLXSaveAsDocumentA
#define TLXSetNamedVariable		TLXSetNamedVariableA
#define TLXGetNamedVarNames		TLXGetNamedVarNamesA
#define TLXGetNamedVarValue		TLXGetNamedVarValueA
#define TLXGetPrinterName		TLXGetPrinterNameA
#define TLXSetPrinterName		TLXSetPrinterNameA
#define TLXGetSysPrinterNames	TLXGetSysPrinterNamesA
#define TLXEditTemplate			TLXEditTemplateA
#define TLXEditTemplateXML		TLXEditTemplateXMLA
#define TLXNamedVarsAddVarData	TLXNamedVarsAddVarDataA
#define TLXSearchRecord			TLXSearchRecordA
#endif

#endif // !defined(AFX_TLXLABELPAINT_H)


