已阅读5页,还剩28页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第三章应用程序实现章内容吐温实现。3 - 1源管理软件的安装。3 - 2改变需要准备一个吐温会话。3 - 2控制吐温从应用程序会话。3 - 9错误处理。3-26吐温兼容的应用程序的最佳实践。3-28遗留问题。3-40本章提供所需的基本信息以实现吐温在最低水平。高级的主题是在第四章所讨论的,“高级应用程序实现”。他们包括如何利用资源提供多个图像的自动喂食。为操作系统具体要求参考第12章,“操作系统依赖关系”。吐温的水平实现应用程序开发人员可以选择在他们的应用程序在实现吐温特性范围的水平。在最低级别:应用程序没有利用能力谈判或传输模式选择。使用吐温违约,它就可以获得一个图像在本地模式下。在更大的层面:应用程序可以与所期望的功能的源代码或谈判图像特征并指定转移安排。这给应用程序控制所接收到的图像类型。为此,开发人员应该遵循指令从第四章本章提供的信息,“先进应用程序实现”。在最高水平:一个应用程序可以选择谈判能力,选择转移模式,创建/展示自己的用户界面,而不是使用内置的提供第三章3 - 2吐温2.3规范源管理器和源。再次,请参阅本章和第四章,“先进应用程序实现”。源管理器软件的安装吐温源代码管理器是一个开源项目维护和吐温所拥有的工作小组(TWG)。构建二进制文件和分布式的TWG几个操作系统。应用程序负责分发和安装的最新版本源管理器软件可以从。为操作系统具体要求参考第12章,“操作系统依赖关系”。改变需要准备一个吐温会话以下方面的应用程序必须改变吐温会话之前就可以开始了。的应用程序开发人员必须:改变应用程序的用户界面添加选择源和获取菜单选择。包括名为吐温的文件。在您的应用程序。改变应用程序的事件循环。修改应用程序的用户界面添加选择源和购买选项在第二章中提到的,“技术概述”,应用程序应该包括两个菜单项目的文件菜单:选择源并获得.强烈建议您使用这些短语,因为这种一致性将所有用户受益。图3 - 1用户界面选择一个源和收购选项请注意以下几点:当这个选择: 应用程序:选择源 源的应用程序请求管理器的选择源对话框出现(或者它可能显示自己的版本)。在用户选择他们想使用来源,控制返回到应用程序。收购。 源显示其用户的应用程序请求接口。(再次,应用程序可以创建自己的版本一个用户界面或显示没有用户界面。)详细信息的操作所使用的应用程序成功地获得数据提供在本章后面的“控制吐温从应用程序会话”3 - 9页。包括马克吐温。H文件在您的应用程序马克吐温。H文件附带这个吐温开发人员工具包包含所有的关键定义需要编写一个TWAIN-compliant应用程序或来源。一定要包括应用程序的代码和打印出一份指在阅读这一章。马克吐温。H文件包含:为每个项目类别前缀数据组DG_数据参数类型DAT_消息MSG_功能CAP_ ICAP_或ACAP_返回代码TWRC_状态码TWCC_类型定义TW_结构定义TW_这些是DSM_Entry DS_Entry入口点此外,有许多常量定义在马克吐温。H不列在这里。改变应用程序的事件循环应用程序将请求为所有操作通过DSM_Entry源经理函数调用,其中包含一个操作三联体描述要求的动作。在代码形式,DSM_Entry功能看起来是这样的:TW_UINT16 TW_CALLINGSTYLE DSM_Entry( pTW_IDENTITY pOrigin, / source of messagepTW_IDENTITY pDest, / destination of messageTW_UINT32 DG, / data group ID: DG_xxxxTW_UINT16 DAT, / data argument type: DAT_xxxxTW_UINT16 MSG, / message ID: MSG_xxxxWhen this is selected: The application does this:Select Source. The application requests that the Source Managers SelectSource Dialog Box appear (or it may display its own version).After the user selects the Source they want to use, controlreturns to the application.Acquire. The application requests that the Source display its userinterface. (Again, the application can create its own version ofa user interface or display no user interface.)Chapter 33-4 TWAIN 2.3 SpecificationTW_MEMREF pData / pointer to data);The DG, DAT, and MSG parameters contain the operation triplet. The parameters must follow theserules:pOrigin应用程序的引用TW_IDENTITY结构。这种结构的内容不得被改变的应用程序从源的连接管理器直到关闭。pde设置为NULL如果操作的最终目的地是经理。否则,设置为指向一个有效的为一个开源TW_IDENTITY结构。DG_xxxx数据组的操作。目前,只有DG_CONTROL、DG_IMAGE DG_AUDIO定义的。自定义数据组可以被定义。DAT_xxxx指示器,惟一地标识数据对象的类型(结构或变量)的引用pData。MSG_xxxx消息指定要采取行动。pData是指TW_xxxx结构或操作中使用的变量。它的类型是由DAT_xxxx指定的。这个参数应该时TW_MEMREF定型被引用。操作三胞胎应用程序管理器三胞胎以下操作可以发送从应用程序消耗的来源经理。他们都使用DG_CONTROL数据组和他们使用三种不同的数据参数类型:DAT_IDENTITY、DAT_PARENT DAT_STATUS。下表列出了数据组、数据参数类型和消息组成每个操作。字母顺序排列的列表为了不他们的顺序通常是由应用程序调用。每一个细节操作可参考格式在第7章,“三胞胎行动”。从应用程序源代码管理器控制操作DG_CONTROL / DAT_IDENTITYMSG_CLOSEDS:准备卸载指定的源MSG_GETDEFAULT:身份信息默认的来源MSG_GETFIRST:身份信息的第一个可用的来源MSG_GETNEXT:下一个可用的身份来源MSG_OPENDS:加载和初始化指定的源MSG_SET:设置默认的身份信息来源MSG_USERSELECT:现在“选择源”对话框DG_CONTROL / DAT_PARENTMSG_CLOSEDSM:准备卸货经理来源MSG_OPENDSM:初始化源经理DG_CONTROL / DAT_STATUSMSG_GET:返回源经理的当前状态代码操作三胞胎应用程序源代码下一组的操作是由应用程序发送到一个特定的来源。这些操作是仍然通过使用DSM_Entry源经理电话。第一组三胞胎使用DG_CONTROL识别数据组。这些操作可以执行任何形式的吐温设备。第二组三胞胎DG_IMAGE标识的使用数据组,表明这些操作是特定于图像数据。每一个细节操作可参考格式在第7章,“三胞胎行动”。从应用程序到源控制操作DG_CONTROL / DAT_CAPABILITYMSG_GET返回功能可用的值(s)包括电流和默认值MSG_GETCURRENT得到能力的当前值MSG_GETDEFAULT获得能力的首选默认值(具体来源)MSG_RESET TWAIN-defined改变能力的当前值默认的只MSG_SET改变能力的当前值(吐温2.2和更高)MSG_SETCONSTRAINT改变能力的当前,违约,可用值(s)(2.2之前相同的功能作为MSG_SET吐温)DG_CONTROL / DAT_DEVICEEVENTMSG_GET:得到一个事件从源(问题只在响应这个调用DG_CONTROL / DAT_NULL / MSG_DEVICEEVENT源)DG_CONTROL / DAT_EVENTMSG_PROCESSEVENT传递一个事件源从应用程序DG_CONTROL / DAT_FILESYSTEMMSG_AUTOMATICCAPTUREDIRECTORY选择接收自动抓取的图像目录MSG_CHANGEDIRECTORY改变当前域名、主机目录,或设备。MSG_COPY复制文件MSG_CREATEDIRECTORY创建一个目录MSG_DELETE删除一个文件或目录MSG_FORMATMEDIA格式存储设备MSG_GETCLOSE由调用MSG_GETFILEFIRST关闭一个上下文MSG_GETFIRSTFILE得到第一个文件在一个目录中MSG_GETINFO得到当前文件的上下文信息MSG_RENAME重命名一个文件DG_CONTROL / DAT_PASSTHRU / MSG_PASSTHRUMSG_PASSTHRU特殊命令时使用源供应商编写诊断应用程序DG_CONTROL / DAT_PENDINGXFERSMSG_ENDXFER应用承认或请求的数据转移MSG_GET返回转移的数量准备供应来源MSG_RESET等待传输的数量设置为零MSG_STOPFEEDER停止ADF没有结束会话DG_CONTROL / DAT_SETUPFILEXFERMSG_GET返回信息源将编写的文件获得的数据MSG_GETDEFAULT返回默认的文件传输信息MSG_RESET重置当前文件信息默认值下文件传输MSG_SET设置文件传输信息DG_CONTROL / DAT_SETUPMEMXFERMSG_GET返回源的首选,最小和最大传输缓冲区大小DG_CONTROL / DAT_STATUS从指定源MSG_GET返回当前状态代码DG_CONTROL / DAT_USERINTERFACEMSG_DISABLEDS导致源的用户界面MSG_ENABLEDS导致源准备显示其用户界面DG_CONTROL / DAT_XFERGROUPMSG_GET返回数据组(目前DG_IMAGE或自定义数据组)为即将到来的转移还有其他DG_CONTROL操作源代码管理器之间的通信和源。他们在第五章讨论,“源实现”。从应用程序源图像操作DG_IMAGE / DAT_CIECOLORMSG_GET返回CIE XYZ为当前传输的信息DG_IMAGE / DAT_GRAYRESPONSEMSG_RESET恢复身份为灰度数据响应曲线MSG_SET使用指定的响应曲线在灰度数据来源DG_IMAGE / DAT_IMAGEFILEXFERMSG_GET启动图像采集使用磁盘文件传输模式DG_IMAGE / DAT_IMAGEINFOMSG_GET返回信息,描述了接下来的形象转移DG_IMAGE / DAT_IMAGELAYOUTMSG_GET描述物理布局/位置的“原始”的形象MSG_GETDEFAULT默认的布局信息图像MSG_RESET设置布局信息转移到违约MSG_SET设置布局未来图像转移DG_IMAGE / DAT_IMAGEMEMXFER使用缓冲内存MSG_GET启动图像采集传输模式DG_IMAGE / DAT_IMAGEMEMFILEXFER使用缓冲内存MSG_GET启动图像采集传输模式,但传输相同的数据保存到一个文件DG_IMAGE / DAT_IMAGENATIVEXFERMSG_GET启动图像采集使用本机传输模式DG_IMAGE / DAT_JPEGCOMPRESSIONMSG_GET JPEG压缩参数返回当前的转移MSG_GETDEFAULT返回默认的JPEG压缩参数MSG_RESET使用源的默认JPEG参数对JPEG转移MSG_SET使用JPEG指定参数对JPEG转移DG_IMAGE / DAT_PALETTE8MSG_GET返回当前面板信息传输MSG_GETDEFAULT返回默认的面板信息来源为当前像素类型MSG_RESET使用默认的面板来源转让这个像素类型MSG_SET使用指定板这个像素类型的转移DG_IMAGE / DAT_RGBRESPONSEMSG_RESET使用源的默认(身份)RGB响应曲线MSG_SET为RGB转移使用指定的响应曲线DG_AUDIO / DAT_AUDIOFILEXFERMSG_GET传输音频数据在文件模式DG_AUDIO / DAT_AUDIOINFOMSG_GET有关当前传输的信息DG_AUDIO / DAT_AUDIONATIVEXFERMSG_GET传输音频数据在本地模式下DSM_Entry参数DG_xxxx的参数、DAT_xxxx MSG_xxxx字段是决定的操作三联体。其他参数都是如下:pOrigin指的是应用程序的一个副本TW_IDENTITY结构。pd如果操作的目的地是源经理:总是会空值。这表明源经理操作是不被传递给一个源。如果操作的目的地是一个来源:这个参数引用来源的一个副本TW_IDENTITY结构维护的应用程序。应用程序收到这结构响应DG_CONTROL / DAT_IDENTITY MSG_OPENDS操作发送从应用程序到源代码管理器。这是下一节讨论更多(“控制吐温会话从应用程序”-状态3 - 4)。pData总是引用一个结构或变量对应于指定的吐温类型DAT_xxxx参数。通常,但并非总是如此,数据参数类型名称对应TW_xxxx数据结构名称。例如,DAT_IDENTITY参数类型使用相应TW_IDENTITY数据结构。数据结构中可以看到所有文件TWAIN.H。应用程序负责分配和回收或结构元素和保证pData正确地引用它。请注意,有两种情况下,当源,而不是应用程序分配一个结构中使用的操作。一个发生在DG_CONTROL / DAT_CAPABILITY / MSG_GET MSG_GETCURRENT,MSG_GETDEFAULT,MSG_RESET操作。应用程序仍然分配* pData但源分配结构引用* pData称为“容器结构”。另一个发生在DG_IMAGE / DAT_JPEGCOMPRESSION操作。的主题涵盖了数据压缩的第4章,“先进的应用程序实现”。在所有情况下,应用程序仍然重新分配所有结构。应用程序的回调函数使用以下吐温三个一组,由应用程序,注册一个接收回调函数信息来源:一个发生在DG_CONTROL / DAT_CAPABILITY / MSG_GET MSG_GETCURRENT,MSG_GETDEFAULT,MSG_RESET操作。应用程序仍然分配* pData但源分配结构引用* pData称为“容器结构”。另一个发生在DG_IMAGE / DAT_JPEGCOMPRESSION操作。的主题涵盖了数据压缩的第4章,“先进的应用程序实现”。在所有情况下,应用程序仍然重新分配所有结构。应用程序的回调函数使用以下吐温三个一组,由应用程序,注册一个接收回调函数信息来源:DG_CONTROL / DAT_CALLBACK / MSG_REGISTER_CALLBACK吐温2.3规范3 - 9注意,年长的事件循环方法仍能工作在Windows上,但它是推荐使用回调。年长的事件循环的方法请参考吐温1.9规范实现。应用程序将打开DS使用后注册的回调DG_CONTROL / DAT_CALLBACK MSG_REGISTER_CALLBACK三联体。回调函数的形式:TW_UINT16 TWAIN_callback(pTW_IDENTITY pOrigin,pTW_IDENTITY pDest,TW_UINT32 DG,TW_UINT16 DAT,TW_UINT16 MSG,TW_MEMREF pData)/ The message should not be processed here./ A flag is set so the Message can be processed in the samethread that Enabled the Data Source.m_Message = MSG;return TWRC_SUCCESS; / or failure etc应用程序注册回调函数在以下方式:TW_CALLBACK调= 0 ;回调。CallBackProc = TWAIN_callback;结果= DSM_Entry(&appIdentity、零DG_CONTROL、DAT_CALLBACK MSG_REGISTER_CALLBACK,(TW_MEMREF)回调);应用程序通过对行动的请求通过DSM_Entry源经理函数调用包含一个操作三联体描述要求的动作。控制一个吐温会话从您的应用程序除了准备讨论这一章的开始,应用程序必须修改启动和控制吐温会话。会议由7个州的马克吐温协议中引入的技术概述。然而,应用程序并不被迫将会话状态1的7没有停止。例如,一些应用程序可以选择暂停状态3移动在更高的州(4 - 7)在收购时反复打开和关闭的来源要求的用户。另一个例子发生在应用程序传输会话的灵活性多个图像在一个会话。应用程序将重复移动6会话的状态州7然后回到状态7 6和期待转移下一个图像。为了简单起见,本章说明了会话状态1至7和状态然后出来支持从7到状态1。图在下一页显示了操作三胞胎用于会话从一个状态转换到下一个。详细的每个国家的信息及其相关的转换。主题包括:状态1 2 -加载源经理DSM_Entry状态2 3 -开放源代码管理器状态3 -选择源状态3 - 4开放源代码国家4 -谈判能力的来源状态4到5 -请求数据从源的收购状态5到6 -认识到数据传输是准备好了国家6到7 -启动和执行转移国家7 - 6 5 -转移结束5到1 -吐温会话断开状态注:资源和应用程序支持DAT_FILESYSTEM操作可能谈判后立即和选择不同的设备上下文的一个来源。为示例中,应用程序可以选择浏览存储在数字图像相机,而不是把它当作一个实时捕获设备。状态1 2 -加载源经理DSM_Entry应用程序必须加载源经理之前能够调用它DSM_Entry点。操作使用:不用于此吐温操作转变。相反,它是一个操作系统具体操作,请章指的是操作系统。状态2 3 -开放源代码管理器源管理器加载。应用程序现在必须打开源代码管理器。一个操作使用:DG_CONTROL / DAT_PARENT / MSG_OPENDSMpOrigin应用程序必须分配一个结构类型的除了TW_IDENTITY并填写所有字段Id字段。一旦结构准备,这pOrigin参数应该点结构。在MSG_OPENDSM操作期间,源经理会填写一个独特的Id字段应用程序的标识符。这个标识符的值是唯一的有效而应用程序连接到源经理。应用程序必须保存整个结构。从现在起,将被称为结构由pOrigin参数来确定应用程序在每一个调用应用程序使DSM_Entry()。吐温TW_IDENTITY结构定义。H文件但对于快速参考,它的样子是这样的:typedef struct TW_UINT32 Id; /* Unique number assigned by DSM foridentification*/TW_VERSION Version;TW_UINT16 ProtocolMajor;TW_UINT16 ProtocolMinor;TW_UINT32 SupportedGroupsTW_STR32 Manufacturer;TW_STR32 ProductFamily;TW_STR32 ProductName; TW_IDENTITY, FAR *pTW_IDENTITY;pde设置为NULL指示操作用于源代码管理器。pData通常,您希望看到这个指向一个结构类型的TW_PARENT但这不是这个案子。通常情况下这是一个例外的DAT字段三个一组标识pData的数据结构。在Windows:pData指向窗口句柄(hWnd)将作为源的“父母”。源管理器将保持这个窗口句柄发布的副本消息回到应用程序。麦金托什:pData应该是空值。在Linux上:pData应该是空值。如何初始化TW_IDENTITY结构这是一个Windows的例子代码用于初始化应用程序的TW_IDENTITY结构。TW_IDENTITY AppID; / Apps identity structureAppID.Id = 0; / Initialize to 0 (Source ManagerTWAIN 2.3 Specification 3-13/ will assign real value)AppID.Version.MajorNum = 3; /Your apps version numberAppID.Version.MinorNum = 5;AppID.Version.Language = TWLG_ENGLISH_USA;AppID.Version.Country = TWCY_USA;lstrcpy (AppID.Version.Info, Your Apps Version String);AppID.ProtocolMajor = 2; /Use yours not the one from twain.hAppID.ProtocolMinor = 2; /Use yours not the one from twain.hAppID.SupportedGroups = DF_APP2 | DG_IMAGE | DG_CONTROL;lstrcpy (AppID.Manufacturer, Apps Manufacturer);lstrcpy (AppID.ProductFamily, Apps Product Family);lstrcpy (AppID.ProductName, Specific App Product Name);在Windows上:使用DSM_Entry打开源经理TW_UINT16 rc;rc = (*pDSM_Entry) (&AppID,NULL,DG_CONTROL,DAT_PARENT,MSG_OPENDSM,(TW_MEMREF) &hWnd);where AppID is the TW_IDENTITY structure that the application set up to identify itself andhWnd is the applications main window handle.On Macintosh: Using DSM_Entry to open the Source Managerrc = DSM_Entry(&AppID,NULL,DG_CONTROL,DAT_PARENT,MSG_OPENDSM,NULL);On Linux: Using DSM_Entry to open the Source ManagerTW_UINT16 rc;rc = (*pDSM_Entry) (&AppID,NULL,DG_CONTROLDAT_PARENT,MSG_OPENDSM,NULL);在AppID TW_IDENTITY结构应用程序设置确定。如果您的数据源需要资源,它负责装卸在运行时间。源管理器不再自动管理资源。国家3 -选择源源经理刚刚打开,现在可以协助您的应用程序选择所需的源。问题DG_CONTROL / DAT_ENTRYPOINT / MSG_GET调用之前打开源。这需要形式:DG_CONTROL / DAT_ENTRYPOINT / MSG_GETpOrigin指向应用程序的TW_IDENTITY结构。pde设置为NULL。pDataTW_ENTRYPOINT指向一个结构类型源管理器返回指向函数的指针,应用程序必须使用在管理分配的内存释放或来源。一个操作使用:DG_CONTROL / DAT_IDENTITY / MSG_USERSELECTpOrigin指向应用程序的TW_IDENTITY结构。所需的数据类型指定的应用程序。这是当你初始化SupportedGroups完成的在应用程序的TW_IDENTITY结构。这导致源代码管理器可供用户选择的只有那些来源能提供所请求的数据类型(s)。其他来源都是灰色的。(注意,如果更多比一个数据类型,例如图像和文本和应用程序想要接受两种类型的数据,它会做一个位操作或类型的常量和地方结果到SupportedGroups字段。)pde设置为NULL。pDataTW_IDENTITY指向一个结构类型。应用程序必须分配这个结构之前调用DSM_Entry。一旦分配结构,应用程序必须:将Id字段设置为零。ProductName字段设置为空字符串(“ 0”)。(如果想要一个特定的应用程序源需要强调在选择源对话框,除了系统默认值,它可以输入的ProductName来源而不是null产品名称字段进行排序。系统默认源和其他可用的来源可以通过使用决定DG_CONTROL / DAT_IDENTITY / MSG_GETDEFAULT MSG_GETFIRST和MSG_GETNEXT操作。)附加字段的结构将由源经理填写在此操作确定所选的源。确保应用程序副本的更新在完成这个调用结构。你会用它来识别源从现在开始。选择源的最常见的方法是使用源代码管理器的选择源对话框。这通常是显示当用户点击您的选择源选择。要做到这一点:1 应用程序发送一个DG_CONTROL / DAT_IDENTITY MSG_USERSELECT操作源管理器显示其对话框。显示所有的列表的对话框来源是安装在系统上,可以提供指定的类型的数据应用程序。它突出源是系统默认值,除非应用程序请求否则。2。用户选择一个源或按下取消按钮。如果没有可用的设备,选择源对话框的选择/ OK按钮将显示为灰色,用户将别无选择但选择取消。3所示。应用程序必须检查DSM_Entry的返回代码来确定用户的行动。如果TWRC_SUCCESS:他们选择源中列出TW_IDENTITY结构由pData参数指出,现在默认的来源。b:如果TWRC_CANCEL:用户点击取消故意或没有其他选择因为没有列出的设备。不要试图打开一个来源。c:如果TWRC_FAILURE:使用DG_CONTROL / DAT_STATUS / MSG_GET操作(发送源管理器)来确定原因。最可能的原因是缺乏足够的内存。作为一种替代方法使用源代码管理器对话框中,选择来源的应用程序设计自己的选择一个源的方法。例如,它可以创建和显示自己的用户界面或者简单的选择一个源没有提供用户选择。这个选择是第四章中讨论的“高级应用程序实现”。州3到4开放源代码源管理器打开和能够帮助您的应用程序打开一个来源。一个操作使用:DG_CONTROL / DAT_IDENTITY / MSG_OPENDSpOrigin指向应用程序的TW_IDENTITY结构。pde设置为NULL。pDataTW_IDENTITY指向一个结构类型。通常,这指向应用程序的源代码的副本TW_IDENTITY结构填满在MSG_USERSELECT操作之前。然而,如果应用程序希望源经理简单地打开默认源,它可以通过设置TW_IDENTITY。以“ 0”产品名称字段进行排序(空字符串)和TW_IDENTITY。Id字段为0。MSG_OPENDS操作期间,源经理分配一个惟一的标识符在TW_IDENTITY源和记录。Id字段。复制结果TW_IDENTITY结构。一旦打开源,通过应用程序将指向这个结果结构pd参数在每个调用的应用程序使得DSM_Entry目的地是源。注意:用户不需要利用选择源选项。他们可能会点击获得选项没有选中的源。在这种情况下,您的应用程序应该打开默认的来源。默认的是最后一个使用的来源用户或最后一个安装。国家4 -谈判能力的来源在这一点上,识别开源的应用程序结构。现在可以操作直接从应用程序源代码。接收一个图像从源,只有一个能力,CAP_XFERCOUNT,现在必须协商。谈判是所有其他功能可选的。注意:当应用程序检测到DF_DSM2 TW_IDENTITY。SupportedGroups,然后应用程序必须使用DSM_MemAllocate DSM_MemFree,DSM_MemLock和DSM_MemUnlock函数从DG_CONTROL / DAT_ENTRYPOINT / MSG_GET它使用与源管理任何内存。使用两个操作:DG_CONTROL / DAT_CAPABILITY / MSG_GETDG_CONTROL / DAT_CAPABILITY / MSG_SET参数为每个操作,除了三联体,这些:pOrigin指向应用程序的TW_IDENTITY结构。pde指出TW_IDENTITY结构所需的来源。源管理器将收到DSM_Entry电话,认识到目的地是一个来源,而不是本身,和通过操作的过程通过DS_Entry源函数。pDataTW_CAPABILITY指向一个结构类型。TW_CAPABILITY的定义是:typedef struct TW_UINT16帽;/ *的ID获取或设置* /能力TW_UINT16 ConType;/ * TWON_ONEVALUE TWON_RANGE * / * TWON_ENUMERATION或TWON_ARRAY * /TW_HANDLE hContainer;容器的类型* / / *处理/ * ConType * / TW_CAPABILITY,远* pTW_CAPABILITY;MSG_GET操作。应用程序分配它与MSG_SET当调用操作。不管谁分配,操作时应用程序重新分配结构完成或当应用程序不再需要维护的信息。每个操作提供了一个特殊的目的:MSG_GET因为来源不需要支持所有功能,此操作可用于确定如果一个特定TWAIN-defined能力支持来源。应用程序需要设置的帽字段TW_CAPABILITY结构标识符代表的能力的兴趣。列出了常数确定每个能力在马克吐温。H文件。如果支持能力和操作成功,它将返回当前默认可用值。这些值反映以前MSG_SET操作的能力改变了他们从马克吐温的默认值的能力。这个操作可能失败,由于几个原因。如果功能不支持的来源,返回代码将TWRC_FAILURE和条件代码将下列之一:TWCC_CAPUNSUPPORTED功能不支持的来源TWCC_CAPBADOPERATION操作不支持的功能TWCC_CAPSEQERROR功能依赖其他功能应用程序应该准备接收条件代码TWCC_BADCAP来源吐温1.7之前写的,它映射到任何上述提到的三种情况。MSG_SET改变当前值(s)的指定功能所要求的应用程序。如果返回代码表明TWRC_FAILURE,检查状态代码。的代码TWCC_BADVALUE可能意味着:该源应用程序发送一个无效的值的范围。源不允许此功能的设置。源不允许容器所使用的应用程序的类型来设置这个功能。谈判能力让应用程序开发人员有权力源和控制提供指导他们收到从源图像。谈判通常发生在国家4。的以下材料说明了只有一个非常基本的能力和容器结构。指第四章,“高级应用程序实现”的功能更广泛的讨论包括信息推迟谈判之外的一些功能状态4。注意:在这里再次提醒应用程序是很重要的作家总是检查回来代码从任何交易谈判能力。MSG_SETCONSTRAINT改变当前值(s)的指定功能所要求的那些应用程序,和限制允许的内容的一个数组,枚举或范围容器。如果返回代码表明TWRC_FAILURE,检查状态代码。的代码TWCC_BADVALUE可能意味着:应用程序发送一个无效值这个来源的容器。源不允许容器所使用的应用程序的类型来设置这个功能谈判能力让应用程序开发人员有权力源和控制提供指导他们收到从源图像。谈判通常发生在国家4。的以下材料说明了只有一个非常基本的能力和容器结构。指第四章,“高级应用程序实现”的功能更广泛的讨论包括信息推迟谈判之外的一些功能状态4。注意:在这里再次提醒应用程序是很重要的作家总是检查回来代码从任何交易谈判能力。设置功能来指定应用程序可以传输图像的数量能力,指定有多少图片应用程序可以接收在马克吐温会话是CAP_XFERCOUNT。所有来源必须支持这个功能。可能的值CAP_XFERCOUNT是:价值:描述:1应用程序想要接收单个图像。大于1应用程序想要接收这个特定数量的图像。1应用程序可以接受任意数量的图像中会话。这是默认的功能。0这个值没有合法的意义和应用程序不应该设置这个值的能力。如果一个源接收时这个值MSG_SET操作,应该保持当前值改变并返回TWRC_FAILURE和TWCC_BADVALUE。默认值允许多个图像被转移。在线演示了代码示例能力和专门的设置显示了如何限制图片的数量。看到set_CapabilityOneValue函数住TwainApp中的代码范例。cpp在其他功能图像类型应用程序应该意识到ICAP_PIXELTYPE和ICAP_BITDEPTH来源。如果您的应用程序不能接受所有的源的可用价值,谈判能力应该做的。(参见第4章,“高级应用程序实现”)。传输模式默认传输模式是本地人。这意味着源将访问的最大阻碍可用内存和使用它来将整个图像传输到应用程序。如果转移可用内存不够大,那么源应该转移失败。应用程序不需要做任何选择这种传输模式。如果应用程序希望指定一个不同的传输模式,磁盘文件或缓冲内存,进一步的能力谈判是必需的。(参见第4章,“高级应用程序实现”)。国家4到5 -请求采集的数据从源源设备和能力开放谈判。应用程序现在可以源,这样就可以显示其用户界面,如果要求,准备获取数据。一个操作使用:DG_CONTROL / DAT_USERINTERFACE / MSG_ENABLEDSpOrigin指向应用程序的TW_IDENTITY结构。pde指向源TW_IDENTITY结构。pDataTW_USERINTERFACE指向一个结构类型。TW_USERINTERFACE的定义是:typedef struct TW_BOOL ShowUI;TW_BOOL ModalUI;TW_HANDLE hParent; TW_USERINTERFACE,远* pTW_USERINTERFACE;设置ShowUI领域如果你想真正的源来显示其用户界面。否则,设置为FALSE。应用程序将ModalUI领域真正的如果它希望源运行模态,和假如果它希望源运行非模态的。请注意,成功运行模态,它为应用程序可能需要禁用输入源的GUI时的窗户吗正在运行。在Windows上,不建议设置这个字段为TRUE。源可以忽略这个值和使用假如果是版本2.1或更低。如果两个源和应用程序2.2或更高版本,那么源必须返回TWRC_CHECKSTATUS如果不支持请求的值。麦金托什,推荐使用。在Linux上这个领域是不习惯。应用程序设置hParent字段不同取决于的平台应用程序的运行。在Windows上,应用程序应该作为一个窗口的句柄源的母公司。麦金托什应用程序设置这个字段为NULL。在Linux上,应用程序将该字段设置为NULL。为了应对用户应用程序的菜单选项,选择应用程序发送操作源启用它。应用程序通常要求显示来源源的用户界面帮助用户获取数据。如果源被告知来显示其用户接口,它将显示在接收操作三联体。模态和非模态的接口第四章中讨论,和第五章,“先进的应用程序实现源实现”。源必须检查ShowUI字段,如果他们不能返回一个错误支持指定的模式。换句话说,它是不可接受的源忽略ShowUI =仍然错误的请求和激活它的用户界面。应用程序可能发展自己的用户界面,而不是使用源的。这是高级应用中讨论实现。注意:一旦通过DG_CONTROL / DAT_USERINTERFACE /启用源MSG_ENABLEDS操作,所有事件,进入应用程序的主事件循环立即转发给源。第十二章中给出的解释是,“操作系统依赖关系”在准备修改事件循环吐温会话。5到6 -认识到数据传输已经准备好了源与用户目前正在安排转让所需的数据。与所有的早些时候转换,源,而不是应用程序,控制的过渡状态5国家6。没有使用操作(从应用程序):这种转变并不是由应用程序发送一个操作。源的原因过渡。在Windows上,同时启用应用程序源,应用程序转发事件源的事件循环利用DG_CONTROL / DAT_EVENT /MSG_PROCESSEVENT操作。第十二章,“操作系统依赖关系”。应用程序将接收一个MSG_XFERREADY,MSG_CLOSEDSREQ或MSG_CLOSEDSOK消息回调函数。当应用程序接收到MSG_XFERREADY交通状态5到6。遗留方法,请参考规范的1.9版。国家6到7 -启动和执行转移源表示,准备传输数据。等待应用程序询问图像细节,启动实际的转移,和,因此,转换的会话状态6到7。使用两个操作:应用程序可能需要询问它将接收的图像数据。的DG_IMAGE/ DAT_IMAGEINFO / MSG_GET操作允许这个。其他操作,如DG_IMAGE /DAT_IMAGELAYOUT / MSG_GET,提供额外的信息。可以使用这些信息确定应用程序实际上想启动传输。DG_IMAGE / DAT_IMAGEINFO / MSG_GETpOrigin指向应用程序的TW_IDENTITY结构。pde指向源TW_IDENTITY结构。pDataPoints to a structure of type TW_IMAGEINFO. The definition of TW_IMAGEINFO is:typedef struct TW_FIX32 XResolution;TW_FIX32 YResolution;TW_INT32 ImageWidth;TW_INT32 ImageLength;TW_INT16 SamplesPerPixel;TW_INT16 BitsPerSample8;TW_INT16 BitsPerPixel;TW_BOOL Planar;TW_INT16 PixelType;TW_UINT32 Compression; TW_IMAGEINFO, FAR *pTW_IMAGEINFO;源将填写信息的形象也被转移。应用程序使用这个操作的信息不管传输模式(本地、磁盘文件或缓冲内存)将用于传输数据。应用程序可能需要询问它将接收的图像数据。的DG_IMAGE/ DAT_
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 豆瓣菜基因组de novo组装、注释及比较进化的深度解析与洞察
- 调和分析方法在数学物理方程中的深度剖析与应用拓展
- 课堂场域中学生身体问题审视与教育策略重构
- 2026年西安雁塔雁南小学教师招聘考试模拟试题及答案详解
- 语言背景差异下的英语课堂提问:本族语与非本族语教师的对比剖析
- 语法转喻视角下英语形容词静态谓语祈使构式的深度剖析与认知探究
- 语文学习的重要性、内容体系与教学策略探究
- 语域理论驱动下民办高校大学英语写作教学的创新与实践
- 2026云南昆明市精神病院临床医生、临床护士、康复治疗师招聘3人笔试参考题库及答案详解
- 试验所构建人力资源战略管理体制的深度剖析与优化路径
- 2025-2026学年人教版五年级数学下册全册知识点总结(完整版)
- 2026年高压电工考试科目一试题及答案
- 建筑施工企业人员资格管理制度范本
- 2026年全国高考试卷及答案解析
- 2026年安全生产法律法规知识培训考试试卷及答案
- (五调)武汉市2026届高三年级五月调研考试数学试卷(含答案及解析)
- 2025年5月-2026年4月时事政治要点(7.8.9年级道德与法治考试专用)
- 2026江苏苏州工业园区管理委员会招聘44人笔试模拟试题及答案解析
- 重症医学科(ICU)ARDS患者机械通气护理指南
- 水电工程后评价技术导则(2023版)
- CDO首席数字官面试题(某大型集团公司)试题集解析
评论
0/150
提交评论