Twain翻譯第四章_第1頁(yè)
Twain翻譯第四章_第2頁(yè)
Twain翻譯第四章_第3頁(yè)
Twain翻譯第四章_第4頁(yè)
Twain翻譯第四章_第5頁(yè)
已閱讀5頁(yè),還剩30頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、高級(jí)應(yīng)用程序?qū)崿F(xiàn)第四章內(nèi)容能力。4 - 1選擇數(shù)據(jù)傳輸。4-17ImageData及其布局。4-23轉(zhuǎn)移多個(gè)圖像。4-26傳輸壓縮數(shù)據(jù)。4-32替代用戶界面。4-35圖像的灰度和顏色信息。4-38使用吐溫獲得光柵圖像從一個(gè)設(shè)備是相對(duì)簡(jiǎn)單的實(shí)現(xiàn)在第3章,“應(yīng)用程序?qū)崿F(xiàn)”。然而,馬克吐溫也允許應(yīng)用程序開(kāi)發(fā)人員超越簡(jiǎn)單的收購(gòu)一個(gè)圖像在本地(DIB或皮克特人)格式。在本章中討論這些更高級(jí)的主題。Capabilities功能,并應(yīng)用談判能力的力量來(lái)源,給控制TWAIN-compliant應(yīng)用程序。在第十二章,“操作系統(tǒng)依賴關(guān)系”,你會(huì)看到的談判能力,CAP_XFERCOUNT。這種能力是在狀態(tài)4協(xié)商總是

2、如此,除非推遲談判是同意由應(yīng)用程序和源代碼。在事實(shí)上,有更多的了解能力。能力值幾個(gè)值是用來(lái)定義每個(gè)功能。在第十章,“能力”,馬克吐溫定義了一個(gè)默認(rèn)值和一組允許的值為每個(gè)功能。應(yīng)用程序不能修改默認(rèn)值。然而,它能限制值提供給用戶允許的值的子集和選擇能力的當(dāng)前值。默認(rèn)值源被打開(kāi)時(shí),每個(gè)功能的當(dāng)前值設(shè)置為吐溫默認(rèn)值列在第十章,“功能”。如果沒(méi)有定義默認(rèn)的吐溫,源將為其默認(rèn)選擇一個(gè)值。應(yīng)用程序可以返回一個(gè)TWAIN-defined能力默認(rèn)發(fā)出DG_CONTROL / DAT_CAPABILITY MSG_RESET操作。盡管吐溫定義默認(rèn)值的功能,可能有不同的來(lái)源值,它將更喜歡使用作為默認(rèn),因?yàn)樗鼘⒏行?/p>

3、。例如,源可能通常使用0在黑白圖像顯示白色。然而,默認(rèn)為ICAP_PIXELFLAVOR TWPF_CHOCOLATE即0代表黑人。盡管吐溫默認(rèn)TWPF_CHOCOLATE,來(lái)源的首選違約TWPF_VANILLA。當(dāng)應(yīng)用程序發(fā)出一個(gè)DG_CONTROL / DAT_CAPABILITY /MSG_GETDEFAULT操作,返回信息來(lái)源對(duì)其首選的違約。的源和應(yīng)用能夠更有效的轉(zhuǎn)移在此基礎(chǔ)上進(jìn)行談判信息。注意,這并不意味著吐溫默認(rèn)值應(yīng)該完全忽視。當(dāng)試圖解決“首選”價(jià)值之間的沖突的一個(gè)特定的數(shù)據(jù)源能力和TWAIN-specified默認(rèn)情況下,它應(yīng)該考慮的問(wèn)題是類似的從會(huì)話,會(huì)話存儲(chǔ)和恢復(fù)圖像屬性。它

4、是合理的假設(shè)數(shù)據(jù)源將想要存儲(chǔ)當(dāng)前值與當(dāng)前一些功能恢復(fù)價(jià)值在未來(lái)的會(huì)議。然后還合理的期望,這些值將恢復(fù)反映的當(dāng)前設(shè)置適當(dāng)?shù)墓δ?。雖然只是存儲(chǔ)設(shè)置真正有用的圖像屬性(數(shù)據(jù)源不會(huì)存儲(chǔ)的值ICAP_PIXELFLAVOR,但它可能會(huì)存儲(chǔ)當(dāng)前ICAP_RESOLUTION),應(yīng)該說(shuō)首選數(shù)據(jù)源的值將以同樣的方式對(duì)待。加載數(shù)據(jù)源時(shí),所有當(dāng)前值適當(dāng)?shù)墓δ茉O(shè)置為值,要么恢復(fù)從先前的會(huì)話,或者那些“喜歡”的數(shù)據(jù)源。當(dāng)前價(jià)值將繼續(xù),直到顯式地改變了MSG_RESET調(diào)用應(yīng)用程序,或者應(yīng)用程序問(wèn)題。這是最好的說(shuō)明使用例子,因?yàn)椴⒉皇撬械墓δ芏歼m合優(yōu)先值,最不適合存儲(chǔ)和跨多個(gè)掃描恢復(fù)會(huì)話。示例1:掃描參數(shù)存儲(chǔ)在一個(gè)會(huì)

5、話,并恢復(fù)在另一個(gè)1。用戶配置數(shù)據(jù)源的用戶界面使用以下參數(shù):4 x6英寸的形象在24位X和Y 200 DPI分辨率2。用戶選擇“掃描”應(yīng)用程序和數(shù)據(jù)源信號(hào)傳輸。3所示。應(yīng)用獲得成功。4所示。應(yīng)用程序禁用數(shù)據(jù)源。5。應(yīng)用程序期間查詢狀態(tài)4幀的當(dāng)前值,像素類型,深度,和決議。6。數(shù)據(jù)源每個(gè)調(diào)查報(bào)告是由用戶設(shè)置的當(dāng)前值:4 x6英寸圖像在24位X和Y 200 DPI分辨率。7所示。應(yīng)用程序關(guān)閉數(shù)據(jù)源。8。在關(guān)閉過(guò)程中,數(shù)據(jù)源存儲(chǔ)當(dāng)前幀,像素類型,深度和決議。9。應(yīng)用程序打開(kāi)數(shù)據(jù)源。10。在開(kāi)放過(guò)程中,數(shù)據(jù)源恢復(fù)當(dāng)前幀,像素類型,深度和決議。11。應(yīng)用程序期間查詢狀態(tài)4幀的當(dāng)前值,像素類型,深度,和決

6、議。12。數(shù)據(jù)來(lái)源報(bào)告每個(gè)調(diào)查恢復(fù)從先前的當(dāng)前值會(huì)話:4 x6英寸X和Y圖像在24位200 DPI分辨率在一個(gè)會(huì)話中。示例2:數(shù)據(jù)源是首選的像素風(fēng)味的前提下吐溫定義默認(rèn)值1。首次應(yīng)用程序打開(kāi)數(shù)據(jù)源2。應(yīng)用程序查詢期間對(duì)違約狀態(tài)4像素的味道3所示。數(shù)據(jù)來(lái)源報(bào)告TWPF_CHOCOLATE默認(rèn)像素的味道。(見(jiàn)第10章,“能力”)。4所示。應(yīng)用程序查詢期間對(duì)當(dāng)前像素狀態(tài)4的味道。5。數(shù)據(jù)來(lái)源報(bào)告,當(dāng)前像素味道TWPF_VANILLA(因?yàn)檫@個(gè)設(shè)備返回?cái)?shù)據(jù),性別本身)。6。應(yīng)用程序問(wèn)題重置為當(dāng)前像素的味道。7所示。在復(fù)位操作,數(shù)據(jù)源改變當(dāng)前值TWPF_CHOCOLATE和準(zhǔn)備轉(zhuǎn)化數(shù)據(jù)轉(zhuǎn)移,以適應(yīng)期間調(diào)

7、用應(yīng)用程序的請(qǐng)求。有一個(gè)條件,這個(gè)邏輯。如果想返回的數(shù)據(jù)源TW_ENUMERATION MSG_GET請(qǐng)求限制能力,有機(jī)會(huì)的默認(rèn)值由吐溫規(guī)范(第十章,“能力”)將不存在在限制設(shè)置的值。在這種情況下,應(yīng)用程序應(yīng)該考慮默認(rèn)值是未定義的。常識(shí)應(yīng)該規(guī)定數(shù)據(jù)源提供一些默認(rèn)的當(dāng)前可用的值集內(nèi)合理安全(糟糕的指數(shù)TW_ENUMERATION)可能是一個(gè)災(zāi)難。當(dāng)默認(rèn)值是(在使用MSG_RESET)應(yīng)當(dāng)及時(shí)解除約束,最初的默認(rèn)值將再次和存在被定義。(參見(jiàn)下一節(jié)關(guān)于MSG_RESET約束能力)這只是一個(gè)問(wèn)題TW_ENUMERATION容器,因?yàn)樗粋€(gè)索引默認(rèn)。Current Value應(yīng)用程序可以請(qǐng)求集的當(dāng)前

8、值的能力。如果源的用戶界面顯示,當(dāng)前值應(yīng)該反映(也許通過(guò)突出)。如果應(yīng)用程序設(shè)置當(dāng)前值,它將用于收購(gòu)和轉(zhuǎn)讓,除非用戶或自動(dòng)源過(guò)程變化。應(yīng)用程序可以通過(guò)檢查確定是否發(fā)生了改變當(dāng)前值在國(guó)家6。確定功能的當(dāng)前值,使用DG_CONTROL / DAT_CAPABILITY /MSG_GETCURRENT。可用來(lái)確定當(dāng)前值和值,使用DG_CONTROL / DAT_CAPABILITY MSG_GET操作。例如,您可以做一個(gè)MSG_GETICAP_PIXELTYPE和源可能會(huì)返回一個(gè)包含TW_ENUMERATION容器TWPT_BW、TWPT_GRAY TWPT_RGB作為可用值。設(shè)置當(dāng)前值:使用DG_

9、CONTROL / DAT_CAPABILITY MSG_SET和下列容器之一:在TW_ONEVALUE.ItemTWON_ONEVALUE:把所需的價(jià)值。TWON_ARRAY:只在TW_ARRAY.ItemList所需的物品。這些必須返回的條目的一個(gè)子集來(lái)源MSG_GET操作。還可以使用TW_ENUMERATION和TW_RANGE容器設(shè)置當(dāng)前值。詳情查看可用的值信息。Available Values限制設(shè)置源可以用在獲取和傳輸過(guò)程中,應(yīng)用程序可以限制可用的值。源外這些不應(yīng)該使用一個(gè)值值。這些限制應(yīng)該反映在源的用戶界面沒(méi)有值不提供給用戶。例如,如果MSG_GET操作ICAP_PIXELTYP

10、E表示支持來(lái)源TWPT_BW、TWPT_GRAY TWPT_RGB圖像和應(yīng)用程序只希望黑人和白人圖像,它可以請(qǐng)求限制可用的值,黑色和白色。限制可用的值:使用DG_CONTROL / DAT_CAPABILITY / MSG_SETCONSTRAINT和下列之一容器:TWON_ENUMERATION:地方只有所需的值TW_ENUMERATION。ItemList字段。當(dāng)前值也可以設(shè)置在這個(gè)時(shí)間設(shè)置CurrentIndex ItemList指向所需的值。TWON_RANGE:地方只有所需的TW_RANGE字段中的值。當(dāng)前值也可以通過(guò)設(shè)置CurrentValue設(shè)置字段。注意:TW_ONEVALUE

11、容器不能用于限制可用的值。Capability Negotiation談判過(guò)程包括三個(gè)基本部分:1。應(yīng)用程序決定了哪些功能支持來(lái)源2。應(yīng)用程序集所需的支持能力3所示。應(yīng)用程序驗(yàn)證設(shè)置源所接受談判(第1部分)源支持的應(yīng)用程序決定了哪些功能步驟1應(yīng)用程序分配一個(gè)TW_CAPABILITY結(jié)構(gòu)和填充它的字段如下:蓋= CAP_,ICAP_或ACAP_名稱的能力很感興趣ConType = TWON_DONTCARE16hContainer =零步驟2應(yīng)用程序使用DG_CONTROL / DAT_CAPABILITY TW_CAPABILITY結(jié)構(gòu)MSG_GET操作。步驟3源檢查帽字段是否支持能力。如果

12、是這樣,它創(chuàng)造了為應(yīng)用程序的信息。在這兩種情況下,適當(dāng)?shù)卦O(shè)置它的返回代碼。步驟4應(yīng)用程序檢查返回代碼,也許條件代碼,從操作。如果TWRC_SUCCESS支持能力和來(lái)源ConType字段與容器由源標(biāo)識(shí)符(TWON_ARRAY,TWON_ENUMERATION、TWON_ONEVALUE或TWON_RANGE)源分配容器結(jié)構(gòu)hContainer ConType和引用場(chǎng)結(jié)構(gòu)。然后容器裝滿值描述能力的當(dāng)前值、默認(rèn)值和可用的值?;谌萜鞯念愋图捌鋬?nèi)容(其類型是由其ItemType表示字段),應(yīng)用程序可以讀取的值。應(yīng)用程序必須釋放容器。如果TWRC_FAILURE TWCC_CAPUNSUPPORTED來(lái)

13、源不支持此功能應(yīng)用程序可以重復(fù)這個(gè)過(guò)程要了解每一個(gè)功能。如果應(yīng)用程序只希望得到的當(dāng)前值的能力,它可以使用MSG_GETCURRENT操作相反。在這種情況下,ConType就是TWON_ONEVALUE或TWON_ARRAY但不是TWON_RANGE或TWON_ENUMERATION。注:能力,CAP_SUPPORTEDCAPS,返回一個(gè)列表的功能,支持來(lái)源。但這并不表明是否支持功能可以協(xié)商,如果源不支持CAP_SUPPORTEDCAPS功能,它返回TWRC_FAILURE /TWCC_CAPUNSUPPORTED。談判(第2部分)應(yīng)用程序集所需的支持能力步驟1應(yīng)用程序分配一個(gè)TW_CAPABI

14、LITY結(jié)構(gòu)和填充它的字段如下:上限= CAP_、ICAP_或ACAP_名稱功能感興趣ConType = TWON_ARRAY、TWON_ENUMERATION TWON_ONEVALUE或TWON_RANGE(參見(jiàn)第十章,“能力”看到每個(gè)能力和什么類型的容器可以用來(lái)設(shè)置一個(gè)特定的功能。)hContainer =應(yīng)用程序必須分配一個(gè)ConType類型的結(jié)構(gòu)和參考這一領(lǐng)域。(見(jiàn)下一步。)步驟2應(yīng)用程序分配一個(gè)結(jié)構(gòu)類型的ConType并填充它。基于收到的值在MSG_GET源,它可以指定所需的當(dāng)前值和可用值它想要源使用。應(yīng)用程序不應(yīng)該試圖設(shè)置源的默認(rèn)價(jià)值,把一個(gè)合適的常數(shù)在這一領(lǐng)域(例TWON_DO

15、NTCARE32)。注意:應(yīng)用程序負(fù)責(zé)回收容器結(jié)構(gòu)時(shí)的操作完成為止。步驟3發(fā)送請(qǐng)求到源使用DG_CONTROL / DAT_CAPABILITY /MSG_SETCONSTRAINT。談判(第3部分)應(yīng)用程序必須驗(yàn)證他們的請(qǐng)求的結(jié)果步驟1即使源支持一個(gè)特定的功能,它不需要支持的設(shè)置這種能力。應(yīng)用程序必須檢查MSG_SET請(qǐng)求的返回代碼看看發(fā)生什么。如果TWRC_SUCCESS源設(shè)置功能要求。如果TWRC_CHECKSTATUS那么源不能使用一個(gè)或多個(gè)你的確切值。例如,你要求值為310,但只能接受100,200,300,300。你的要求是在它最親密的有效合法的范圍,所以它的設(shè)置。使用DG_CON

16、TROL / DAT_CAPABILITY / MSG_GET操作來(lái)確定當(dāng)前和可用的設(shè)置。這是唯一的方法來(lái)確定源的選擇接受您的應(yīng)用程序。如果TWRC_FAILURE / TWCC_BADVALUE源不批準(zhǔn)你的請(qǐng)求組或限制的價(jià)值。,或者你的要求值并不在其合法的值。它可能試圖將值設(shè)置為最親密的可用價(jià)值。使用DG_CONTROL / DAT_CAPABILITY / MSG_GET操作來(lái)確定當(dāng)前和可用的設(shè)置。這是唯一的方法可以確定您的應(yīng)用程序繼續(xù)沒(méi)有你的要求值。您可以重復(fù)設(shè)置和驗(yàn)證流程每一個(gè)感興趣的你的能力應(yīng)用程序。記住,你的應(yīng)用程序必須釋放所有容器結(jié)構(gòu)。The Most Common Capabi

17、lities吐溫定義了超過(guò)150的能力。雖然看起來(lái)勢(shì)不可擋,它是更容易處理如果你認(rèn)識(shí)到更常用的一些功能。這里有一些這些功能:基本的能力單位ICAP_UNITS能力決定了所使用的度量單位將源。默認(rèn)是英寸但厘米、像素等都是允許的。這個(gè)功能使用的價(jià)值在測(cè)量其他值的功能和數(shù)據(jù)結(jié)構(gòu)包括:ICAP_PHYSICALHEIGHT,ICAP_PHYSICALWIDTH,ICAP_XNATIVERESOLUTION,ICAP_YNATIVERESOLUTION,ICAP_XRESOLUTION,ICAP_YRESOLUTION,TW_FRAME,TW_IMAGEINFO.XResolution,TW_IMAGE

18、INFO.YResolution意義上的像素ICAP_PIXELFLAVOR指定應(yīng)該如何解釋一些數(shù)據(jù)時(shí)轉(zhuǎn)移從源應(yīng)用程序。默認(rèn)是TWPF_CHOCOLATE這意味著一個(gè)0表示黑色的(或最黑暗的顏色)。TWPF_VANILLA替代,0表示白色(或手段輕的顏色)。決議圖像分辨率是報(bào)道TW_IMAGEINFO結(jié)構(gòu)。查詢或設(shè)置源的決議,使用ICAP_XRESOLUTION和ICAP_YRESOLUTION。還指ICAP_XNATIVERESOLUTION ICAP_YNATIVERESOLUTION。Image Type Capabilities類型的像素應(yīng)用程序應(yīng)該ICAP_PIXELTYPE ICA

19、P_BITDEPTH,除非它可以進(jìn)行談判處理所有像素類型位深。允許像素類型有:TWPT_BW TWPT_GRAY,TWPT_RGB、TWPT_PALETTE TWPT_CMY、TWPT_CMYK TWPT_YUV,TWPT_YUVK,TWPT_CIEXYZ,TWPT_INFRARED。像素的深度(位)像素類型如TWPT_BW只允許1比特每像素(黑色或白色)。另一個(gè)像素類型可能允許各種比特每像素24或48比特位(4比特或8位灰度,顏色)。是首先確定設(shè)置ICAP_PIXELTYPE,然后設(shè)置ICAP_BITDEPTH。Parameters for Acquiring the Image曝光可以影響

20、這幾個(gè)功能。它們包括ICAP_BRIGHTNESS ICAP_CONTRAST,ICAP_SHADOW、ICAP_HIGHLIGHT ICAP_GAMMA,ICAP_AUTOBRIGHT。擴(kuò)展指導(dǎo)一個(gè)源圖像在傳輸之前,規(guī)模指ICAP_XSCALING和ICAP_YSCALING。旋轉(zhuǎn)指導(dǎo)一個(gè)源旋轉(zhuǎn)圖像在傳輸之前,參考ICAP_ROTATION和ICAP_ORIENTATION。Constrained Capabilities and Message Responses有一些困惑關(guān)于數(shù)據(jù)源應(yīng)該如何應(yīng)對(duì)各種功能查詢當(dāng)應(yīng)用程序?qū)嵤┝讼拗扑С值膬r(jià)值觀。以下指南應(yīng)該幫助澄清的情況。MSG_RESET眾

21、所周知,這個(gè)調(diào)用重置的當(dāng)前值默認(rèn)請(qǐng)求的能力。它必須也是說(shuō)這叫還將重置任何應(yīng)用程序?qū)嵤┘s束要求能力。MSG_GETCURRENT,MSG_GETDEFAULT直觀的假設(shè)這消息不應(yīng)該不支持的功能當(dāng)前或默認(rèn)值。然而,規(guī)范說(shuō)否則在第十章,“能力”(CAP_SUPPORTEDCAPS就是一個(gè)很好的例子)。在這種情況下,簡(jiǎn)單地應(yīng)對(duì)這些是有意義的以同樣的方式作為MSG_GET消息。它也可以被認(rèn)為是更直觀的數(shù)據(jù)源來(lái)應(yīng)對(duì)這種能力TW_ONEVALUE TW_ONEVALUE容器容器在所有情況下,是被允許的。MSG_GET如果一個(gè)應(yīng)用程序限制目前的能力,然后反應(yīng)的數(shù)據(jù)源消息應(yīng)該反映這些約束。否則,這應(yīng)該回應(yīng)所有的

22、值支持的數(shù)據(jù)源。當(dāng)然,可以放置在響應(yīng)值限制允許的容器特定的第十章中概述當(dāng)前的能力,“能力”。MSG_SET (applies if either the application or the driver is TWAIN 2.1 or less)在第七章表示,“三胞胎行動(dòng)”,此功能三聯(lián)體的描述:“當(dāng)前值設(shè)置在容器TW_ONEVALUE或TW_ARRAY??捎玫暮彤?dāng)前值設(shè)置當(dāng)容器TW_ENUMERATION或TW_RANGE?!边M(jìn)一步澄清這個(gè)操作,應(yīng)該指出,當(dāng)應(yīng)用程序強(qiáng)加一個(gè)約束,數(shù)據(jù)源必須考慮支持的一組值的設(shè)置要求約束。的產(chǎn)生的價(jià)值觀應(yīng)當(dāng)只包含那些支持和共享的價(jià)值觀要求。實(shí)施后,可能會(huì)出現(xiàn)一

23、個(gè)條件約束,默認(rèn)值是不再一組支持的值。的報(bào)道,當(dāng)使用TW_ENUMERATION默認(rèn)索引應(yīng)該被改變的數(shù)據(jù)源的東西屬于新的約束集。這是簡(jiǎn)單的預(yù)防措施,以確保它是一個(gè)有效的索引。在這種情況下,默認(rèn)的索引中TW_ENUMERATION失去意義和應(yīng)用程序應(yīng)該被忽略的,因?yàn)镸SG_RESET應(yīng)當(dāng)導(dǎo)致約束被消除。MSG_SET(如果適用于應(yīng)用程序和驅(qū)動(dòng)程序是吐溫2.2或更多)當(dāng)應(yīng)用程序和司機(jī)都是吐溫2.2或更高版本MSG_SET只改變了當(dāng)前值,它沒(méi)有影響可用的值。這適用于無(wú)論容器類型使用。換句話說(shuō),TW_ENUMERATION和TW_RANGE可用于設(shè)置當(dāng)前值使用MSG_SET。只在TW_ENUMERAT

24、ION ItemType,CurrentIndex ItemList字段是用于獲取當(dāng)前值。只在TW_RANGE ItemType和CurrentValue使用字段。MSG_SETCONSTRAINT (applies if both the application and the driver is TWAIN 2.2 ormore)第七章指出,“三胞胎行動(dòng)”:“當(dāng)前值設(shè)置在容器TW_ONEVALUE或TW_ARRAY。可用的和當(dāng)前值設(shè)置當(dāng)容器TW_ENUMERATION或TW_RANGE?!边M(jìn)一步澄清這個(gè)操作,應(yīng)該指出,當(dāng)應(yīng)用程序強(qiáng)加一個(gè)約束,數(shù)據(jù)源必須考慮支持的一組值的設(shè)置要求約束。的產(chǎn)生

25、的價(jià)值觀應(yīng)當(dāng)只包含那些支持和共享的價(jià)值觀要求。實(shí)施后,可能會(huì)出現(xiàn)一個(gè)條件約束,默認(rèn)值是不再一組支持的值。的報(bào)道,當(dāng)使用TW_ENUMERATION默認(rèn)索引應(yīng)該被改變的數(shù)據(jù)源的東西屬于新的約束集。這是簡(jiǎn)單的預(yù)防措施,以確保它是一個(gè)有效的索引。在這種情況下,默認(rèn)的索引中TW_ENUMERATION失去意義和應(yīng)用程序應(yīng)該被忽略的,因?yàn)镸SG_RESET應(yīng)當(dāng)導(dǎo)致約束被消除。Capability Containers in Code Form功能應(yīng)用程序之間的信息傳遞和利用數(shù)據(jù)結(jié)構(gòu)稱為源容器:TW_ARRAY TW_ENUMERATION、TW_ONEVALUE TW_RANGE。所需的行為創(chuàng)建(包)和

26、讀取(解壓縮)容器在下面的代碼段。容器是靈活的,因?yàn)樗鼈兛梢远x包含許多類型的數(shù)據(jù)之一。只有一個(gè)ItemType(TWTY_xxxx)說(shuō)明/容器(TWON_xxxx)。指工具箱磁盤(pán)完整的包裝和拆包實(shí)用程序,您可以使用容器。Reading (unpacking) a Container from a MSG_GET Operation/-/Example of DG_CONTROL / DAT_CAPABILITY / MSG_GET/-TW_CAPABILITY twCapability;TW_INT16 rc;/Setup TW_CAPABILITY StructuretwCapabilit

27、y.Cap = Cap; /Fill in capability of interesttwCapability.ConType = TWON_DONTCARE16;twCapability.hContainer = NULL;/Send the Tripletrc = (*pDSM_Entry)(&AppID,&SourceID,DG_CONTROL,DAT_CAPABILITY,MSG_GET,(TW_MEMREF)&twCapability);/Check return codeif (rc = TWRC_SUCCESS)/Switch on Container Typeswitch (

28、twCapability.ConType)/-ENUMERATIONcase TWON_ENUMERATION:pTW_ENUMERATION pvalEnum;TW_UINT16 valueU16;TW_UINT16 index;pvalEnum =(pTW_ENUMERATION)GlobalLock(twCapability.hContainer);NumItems = pvalEnum-NumItems;CurrentIndex = pvalEnum-CurrentIndex;DefaultIndex = pvalEnum-DefaultIndex;for (index = 0; in

29、dex NumItems; index+)if (pvalEnum-ItemType = TWTY_UINT16)valueU16 = (TW_UINT16)(pvalEnum-ItemListindex*2);/Store Item Valueelse if (pvalOneValue-ItemType = TWTY_BOOL)valueBool = (TW_BOOL*)&pvalEnum-ItemList)index;/Store Item ValueGlobalUnlock(twCapability.hContainer);break;/-ONEVALUEcase TWON_ONEVAL

30、UE:pTW_ONEVALUE pvalOneValue;TW_BOOL valueBool;pvalOneValue =(pTW_ONEVALUE)GlobalLock(twCapability.hContainer);if (pvalOneValue-ItemType = TWTY_BOOL)valueBool = (TW_BOOL)pvalOneValue-Item;/Store Item ValueGlobalUnlock(twCapability.hContainer);break;/-RANGEcase TWON_RANGE:pTW_RANGE pvalRange;pTW_FIX3

31、2 pTWFix32;float valueF32;TW_UINT16 index;pvalRange = (pTW_RANGE)GlobalLock(twCapability.hContainer);if (TW_UINT16)pvalRange-ItemType = TWTY_FIX32)pTWFix32 = &(pvalRange-MinValue);valueF32 = FIX32ToFloat(*pTWFix32);/Store Item ValuepTWFix32 = &(pvalRange-MaxValue);valueF32 = FIX32ToFloat(*pTWFix32);

32、/Store Item ValuepTWFix32 = &(pvalRange-StepSize);valueF32 = FIX32ToFloat(*pTWFix32);/Store Item ValueGlobalUnlock(twCapability.hContainer);break;/-ARRAYcase TWON_ARRAY:pTW_ARRAY pvalArray;TW_UINT16 valueU16;TW_UINT16 index;pvalArray = (pTW_ARRAY)GlobalLock(twCapability.hContainer);for (index = 0; i

33、ndex NumItems; index+)if (pvalArray-ItemType = TWTY_UINT16)valueU16 = (TW_UINT16)(pvalArray-ItemListindex*2);/Store Item ValueGlobalUnlock(twCapability.hContainer);break; /End Switch StatementGlobalFree(twCapability.hContainer); else /Capability MSG_GET Failed check Condition Code/* Fix32ToFloat* Co

34、nvert a FIX32 value into a floating point value.*/float FIX32ToFloat (TW_FIX32 fix32)float floater;floater = (float)fix32.Whole + (float)fix32.Frac / 65536.0;return floater;Creating (packing) a Container for a MSG_SET Operation/-/Example of DG_CONTROL / DAT_CAPABILITY / MSG_SET/-TW_CAPABILITY twCapa

35、bility;TW_INT16 rc;TW_UINT32 NumberOfItems;twCapability.Cap = Cap; /Insert Capability of InteresttwCapability.ConType = Container;/Use TWON_ONEVALUE or TWON_ARRAY to set current value/Use TWON_ENUMERATION or TWON_RANGE to limit available valuesswitch (twCapability.ConType)/-ENUMERATIONcase TWON_ENUM

36、ERATION:pTW_ENUMERATION pvalEnum;/The number of Items in the ItemListNumberOfItems = 2;/Allocate memory for the container and additional ItemList/ entriestwCapability.hContainer = GlobalAlloc(GHND,(sizeof(TW_ENUMERATION) + sizeof(TW_UINT16) *(NumberOfItems);pvalEnum = (pTW_ENUMERATION)GlobalLock(twC

37、apability.hContainer);pvalEnum-NumItems = 2 /Number of Items in ItemListpvalEnum-ItemType = TWTY_UINT16;(TW_UINT16)(pvalEnum-ItemList0) = 1;(TW_UINT16)(pvalEnum-ItemList1) = 2;GlobalUnlock(twCapability.hContainer);break;/-ONEVALUEcase TWON_ONEVALUE:pTW_ONEVALUE pvalOneValue;twCapability.hContainer =

38、 GlobalAlloc(GHND,sizeof(TW_ONEVALUE);pvalOneValue =(pTW_ONEVALUE)GlobalLock(twCapability.hContainer);(TW_UINT16)pvalOneValue-ItemType = TWTY_UINT16;(TW_UINT16)pvalOneValue-Item = 1;GlobalUnlock(twCapability.hContainer);break;/-RANGEcase TWON_RANGE:pTW_RANGE pvalRange;TW_FIX32 TWFix32;float valueF32

39、;twCapability.hContainer = GlobalAlloc(GHND, sizeof(TW_RANGE);pvalRange = (pTW_RANGE)GlobalLock(twCapability.hContainer);(TW_UINT16)pvalRange-ItemType = TWTY_FIX32;valueF32 = 100;TWFix32 = FloatToFIX32 (valueF32);pvalRange-MinValue = *(pTW_INT32) &TWFix32);valueF32 = 200;TWFix32 = FloatToFIX32 (valu

40、eF32);pvalRange-MaxValue = *(pTW_INT32) &TWFix32);GlobalUnlock(twCapability.hContainer);break;/-ARRAYcase TWON_ARRAY:pTW_ARRAY pvalArray;/The number of Items in the ItemListNumberOfItems = 2;/Allocate memory for the container and additional ItemListentriestwCapability.hContainer = GlobalAlloc(GHND,(

41、sizeof(TW_ARRAY) + sizeof(TW_UINT16) * (NumberOfItems);pvalArray = (pTW_ARRAY)GlobalLock(twCapability.hContainer);(TW_UINT16)pvalArray-ItemType = TWTY_UINT16;(TW_UINT16)pvalArray-NumItems = 2;(TW_UINT16)(pvalArray-ItemList0) = 1;(TW_UINT16)(pvalArray-ItemList1) = 2;GlobalUnlock(twCapability.hContain

42、er);break;/-MSG_SETrc = (*pDSM_Entry)(&AppID,&SourceID,DG_CONTROL,DAT_CAPABILITY,MSG_SET,(TW_MEMREF)&twCapability);GlobalFree(twCapability.hContainer);switch (rc)case TWRC_SUCCESS:/Capabilitys Current or Available value was set as specifiedcase TWRC_CHECKSTATUS:/The Source matched the specified valu

43、e(s) as closely aspossible/Do a MSG_GET to determine the settings madecase TWRC_FAILURE:/Check the Condition Code for more information/* FloatToFix32* Convert a floating point value into a FIX32.*/TW_FIX32 FloatToFix32 (float floater)TW_FIX32 Fix32_value;TW_INT32 value = (TW_INT32) (floater * 65536.

44、0 + 0.5);Fix32_value.Whole = value 16;Fix32_value.Frac = value & 0x0000ffffL;return (Fix32_value);Delayed Negotiation - Negotiating Capabilities After State 4應(yīng)用程序可能詢問(wèn)一個(gè)源的能力值在會(huì)話期間的任何時(shí)候源。然而,作為一個(gè)規(guī)則,應(yīng)用程序只能請(qǐng)求期間設(shè)置功能狀態(tài)4。這一限制背后的基本原理與源的顯示的用戶界面時(shí)啟用源。許多來(lái)源將修改的內(nèi)容用戶界面響應(yīng)一些應(yīng)用程序請(qǐng)求的設(shè)置。這些用戶界面修改防止用戶從選擇的選擇不符合應(yīng)用程序的請(qǐng)求的值。源的

45、用戶界面不會(huì)顯示在狀態(tài)4就可以改動(dòng)所以用戶的意識(shí)。然而,界面會(huì)顯示在狀態(tài)5到7。有些功能沒(méi)有影響源的用戶界面和應(yīng)用程序可能真的想讓他們以后比4。允許推遲談判,應(yīng)用程序必須請(qǐng)求,在狀態(tài)4,一個(gè)特定的功能可以設(shè)置后(在州5、6、7)。源可能同意這個(gè)請(qǐng)求或拒絕它。請(qǐng)求應(yīng)用程序與協(xié)商源利用DG_CONTROL CAP_EXTENDEDCAPS / DAT_CAPABILITY操作能力。CAP_EXTENDEDCAPS能力,DG_CONTROL / DAT_CAPABILITY操作:MSG_GET表示能力源州5中愿意協(xié)商,6或7。MSG_SET指定哪些功能應(yīng)用程序希望談判在5、6、7。對(duì)馬克吐溫2.3或

46、更高版本的數(shù)據(jù)源,該值將已經(jīng)被設(shè)置為允許的值數(shù)據(jù)源,從未開(kāi)始空列表。MSG_GETCURRENT源提供一個(gè)數(shù)組的功能允許在州5談判,6和7。為吐溫2.3或更高版本的數(shù)據(jù)源,該值將已經(jīng)被設(shè)置為允許的值數(shù)據(jù)源,從未開(kāi)始空列表。與任何其他功能,如果源不支持談判CAP_EXTENDEDCAPS,將返回的返回碼TWRC_FAILURE TWCC_CAPUNSUPPORTED條件代碼。如果一個(gè)應(yīng)用程序試圖設(shè)置一個(gè)狀態(tài)的能力5、6、7和源沒(méi)有之前同意這樣的安排,操作將會(huì)失敗TWRC_FAILURE的返回代碼TWCC_SEQERROR的狀態(tài)碼。如果應(yīng)用程序不使用源的用戶界面,但提出了自己的應(yīng)用程序顯式地控制源

47、的狀態(tài)。如果應(yīng)用程序想要設(shè)置任何的價(jià)值功能,它返回源狀態(tài)4和這樣做。因此,應(yīng)用程序使用它自己的用戶界面將可能不需要使用CAP_EXTENDEDCAPS。Options for Transferring Data正如前面所討論的,有三種模式定義為吐溫傳輸數(shù)據(jù):本地磁盤(pán)文件緩沖內(nèi)存源需要支持本地和緩沖內(nèi)存?zhèn)鬏敗ative Mode Transfer使用本地模式,默認(rèn)模式,傳輸數(shù)據(jù)覆蓋在第3章,“應(yīng)用程序?qū)崿F(xiàn)”。有一個(gè)潛在的限制,可以發(fā)生在一個(gè)本地模式轉(zhuǎn)移。也就是說(shuō),可能沒(méi)有一個(gè)足夠大的內(nèi)存塊可用來(lái)保存圖像。這種情況下不會(huì)被發(fā)現(xiàn),直到傳輸嘗試當(dāng)應(yīng)用程序問(wèn)題DG_IMAGE / DAT_IMAGEN

48、ATIVEXFER / MSG_GET操作。缺乏記憶出現(xiàn)時(shí),源可能回應(yīng)的幾種方法。它可以:簡(jiǎn)單操作失敗。視頻圖像,讓它可用RAM -源應(yīng)通知用戶剪切操作發(fā)生是由于有限的內(nèi)存。剪切應(yīng)保持的選擇圖像的縱橫比和原點(diǎn)(左上角)。與用戶互動(dòng)讓他們調(diào)整圖像或取消捕獲。返回的返回碼/條件代碼DG_IMAGE / DAT_IMAGENATIVEXFER /MSG_GET操作可能表明這些行動(dòng)的發(fā)生。If the Return Code is TWRC_XFERDONE:這表明轉(zhuǎn)讓完成后,會(huì)話狀態(tài)7。然而,它不保證源沒(méi)有剪輯圖像,使其健康。即使應(yīng)用程序發(fā)布DG_IMAGE / DAT_IMAGEINFO MSG_

49、GET操作轉(zhuǎn)移之前確定的形象大小,不能認(rèn)為ImageWidth和ImageLength值返回操作真正適用于最終的圖像傳輸。如果圖像的尺寸重要的應(yīng)用程序,應(yīng)用程序應(yīng)該檢查實(shí)際的圖像傳輸轉(zhuǎn)讓完成后大小。要做到這一點(diǎn):1。執(zhí)行一個(gè)DG_CONTROL / DAT_PENDINGXFERS / MSG_ENDXFER操作移動(dòng)會(huì)話狀態(tài)7 - 6(5)。2。確定圖像的實(shí)際大小是通過(guò)閱讀標(biāo)題的轉(zhuǎn)移實(shí)際的圖像數(shù)據(jù)傳輸??吹降?2章,“操作系統(tǒng)依賴關(guān)系”獲得更多信息。如果返回代碼TWRC_CANCEL:收購(gòu)被用戶取消。會(huì)話狀態(tài)是7。執(zhí)行一個(gè)DG_CONTROL /DAT_PENDINGXFERS / MSG_E

50、NDXFER操作將會(huì)話狀態(tài)7 - 6(5)。如果返回代碼TWRC_FAILURE:檢查狀態(tài)碼來(lái)確定故障的原因。會(huì)話狀態(tài)是6。沒(méi)有內(nèi)存分配的DIB和皮克特人。圖像仍懸而未決。如果缺乏記憶原因,你可以嘗試免費(fèi)額外的內(nèi)存或丟棄懸而未決的圖像通過(guò)執(zhí)行DG_CONTROL / DAT_PENDINGXFERS / MSG_ENDXFER。Disk File Mode Transfer磁盤(pán)文件模式被確定為T(mén)WSX_FILE。不需要支持磁盤(pán)文件來(lái)源轉(zhuǎn)移驗(yàn)證的支持是很重要的。確定源支持磁盤(pán)文件模式使用DG_CONTROL / DAT_CAPABILITY MSG_GET操作。設(shè)置TW_CAPABILITY I

51、CAP_XFERMECH帽字段。源返回的信息傳輸模式支持的容器結(jié)構(gòu)指出TW_CAPABILITY hContainer字段的結(jié)構(gòu)。磁盤(pán)文件模式確認(rèn)為T(mén)WSX_FILE。支持驗(yàn)證磁盤(pán)文件傳輸后,設(shè)置轉(zhuǎn)移在國(guó)家4:設(shè)置ICAP_XFERMECH TWSX_FILE。使用DG_CONTROL / DAT_CAPABILITY /MSG_SET操作。使用DG_CONTROL / DAT_CAPABILITY / MSG_GET操作,以確定哪些文件格式可以支持來(lái)源。設(shè)置TW_CAPABILITY。上限ICAP_IMAGEFILEFORMAT并執(zhí)行MSG_GET。源返回的支持格式標(biāo)識(shí)符從TWFF_開(kāi)始,可

52、能包括TWFF_PICT、TWFF_BMP TWFF_TIFF等等。在吐溫的上市。H文件第八章的常量部分,”數(shù)據(jù)類型和數(shù)據(jù)結(jié)構(gòu)”。During States 4, 5, or 6:設(shè)置轉(zhuǎn)移MSG_GET DG_CONTROL / DAT_SETUPFILEXFER操作,可以使用MSG_GETDEFAULT,MSG_SET。DSM_Entry調(diào)用中使用的數(shù)據(jù)結(jié)構(gòu)是一個(gè)(TW_SETUPFILEXFER結(jié)構(gòu)DAT_SETUPFILEXFER):typedef struct TW_STR255文件名;* / / *文件包含數(shù)據(jù)TW_UINT16格式;/ * TWFF_xxxx常量* /TW_HANDLE VrefNum;/ *僅用于Macintosh * / TW_SETUPFILEXFER,遠(yuǎn)* pTW_SETUPFILEXFER;應(yīng)用程序可以使用MSG_GETDEFAULT操作來(lái)確定默認(rèn)文件格式和文件名(吐溫。TMP或馬克吐溫。澳元在當(dāng)前目

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論