?? 輸入法編程指南.htm
字號:
needs to generate. <BR>*lpdwTransBuf++ = (DWORD) msg;
<BR>*lpdwTransBuf++ = (DWORD) wParam; <BR>*lpdwTransBuf++ =
(DWORD) lParam; <BR>// Count the number of the messages that
the IME needs to generate. <BR>dwMyNumMsg++; <BR>. <BR>. <BR>.
<BR>return dwMyNumMsg; <BR>}
<BR> 系統提供lpdwTransBuf參數指定的緩沖區,IMEToAsciiEx函數可以一次存儲所有的消息到該緩沖區中,緩沖區的第一個雙字給出存儲在緩沖區中的消息個數。如果ImeToAsciiEx函數需要生成比這個給定的個數更多的消息,函數可以存儲所有的消息到輸入上下文的hMsgBuf域中,然后函數ImeToAsciiEx返回消息個數。當ImeToAsciiEx函數的返回值大于lpdwTransBuf中指定的值時,系統不從lpdwTransBuf中取出消息,系統查找作為ImeToAsciiEx函數參數傳遞的輸入上下文中的hMsgBuf域。
<BR><BR>2、使用消息緩沖區
<BR> 下面的實例顯示了怎樣使用消息緩沖區:
<BR>MyGenerateMesage(HIMC hIMC, UINT msg, WPARAM wParam,
LPARAMlParam) <BR>{ <BR>LPINPUTCONTEXT lpIMC; <BR>HGLOBAL
hTemp; <BR>LPDWORD lpdwMsgBuf; <BR>DWORD dwMyNumMsg = 1;
<BR>// Lock the input context. <BR>lpIMC = ImmLockIMC(hIMC);
<BR>if (!lpIMC) <BR>// Error! <BR>// re-allocate the memory
bloack for the message buffer. <BR>hTemp =
ImmReSizeIMCC(lpIMC->hMsgBuf, <BR>(lpIMC->dwNumMsgBuf +
dwMyNumMsg) * sizeof(DWORD) * 3); <BR>if (!hTemp) <BR>//
Error! <BR>lpIMC->hMsgBuf = hTemp; <BR>// Lock the memory
for the message buffer. <BR>lpdwMsgBuf =
ImmLockIMCC(lpIMC->hMsgBuf); <BR>if (!lpdwMsgBuf) <BR>//
Error! <BR>lpdwNumMsgBuf += 3 * lpIMC->dwNumMsgBuf. <BR>//
Set the number of the messages. <BR>lpIMC->dwNumMsgBuf +=
dwMyNumMsg; <BR>// Set the messages that the IME needs to
generate. <BR>*lpdwMsgBuf++ = (DWORD) msg; <BR>*lpdwMsgBuf++ =
(DWORD) wParam; <BR>*lpdwMsgBuf++ = (DWORD) lParam; <BR>//
Unlock the memory for the message buffer and the input
context. <BR>ImmUnlockIMCC(lpIMC->hMsgBuf);
<BR>ImmLockIMC(hIMC); <BR>// Call ImmGenerateMessage function.
<BR>ImmGenerateMessage(hIMC); <BR>}
<BR><BR>3、WM_IME_COMPOSITION消息
<BR> 當IME生成WM_IME_COMPOSITION消息時,IME指定lParam參數為GCS位。GCS位的意義是COMPOSITIONSTRING結構中的有效成員,即使IME沒有更新,成員目前仍然有效,IME也會設置GCS位。
<BR> 為IME定義服務
<BR> 當IME生成WM_IME_COMPOSITION消息時,IME可能會立刻改變字符串、屬性以及子句信息。IME使用下列定義:
<BR>GCS_COMP <BR>GCS_COMPREAD <BR>GCS_RESULT
<BR>GCS_RESULTREAD<BR><BR>五、關于ImeSetCompositionString函數
<BR><BR>1、ImeSetCompositionString函數能力
<BR> 如果IME沒有ImeSetCompositionString函數能力,IME將不能在IMEINFO結構中指定任何SCS能力。如果IME可以處理ImeSetCompositionString函數,IME設置SCS_COMPSTR位。如果IME可以通過寫作字符串生成解釋(本文中的“解釋”是單詞“reading”的直譯,真正意義可能是“原始輸入的”,例如輸入的漢語拼音字母字符串,下同)字符串,IME可以設置SCS_CAP_MAKEREAD位。
<BR> 如果IME有SCS_CAP_COMPSTR能力,ImeSetCompositionString函數將被調用,IME從應用程序獲取新的寫作字符串并生成WM_IME_COMPOSITION消息。
<BR> 如果IME有SCS_CAP_MAKEREAD能力,IME可以通過寫作字符串建立解釋字符串。
<BR><BR>2、關于SCS_SETSTR
<BR> 如果ImeSetCompositionString函數的dwIndex參數值為SCS_SETSTR,IME可以清除hIMC中的COMPOSITIONSTR結構中所有的域。
<BR>如果IME需要,IME可以更新候選信息并生成候選消息IMN_OPENCANDIDATE、IMN_CHANGECANDIDATE或者IMN_CLOSECANDIDATE。
<BR> 如果ImeSetCompositionString函數的lpRead參數有效,IME應該通過lpRead參數中的解釋字符串建立寫作字符串,另外IME為新的寫作字符串和lpRead參數中的解釋字符串建立屬性和子句信息,IME生成lParam參數為(GCS_COMP|GCS_COMPREAD)的WM_IME_COMPOSITION消息。有時IME需要自動確定建立上述信息,這種情況下,IME可以生成lParam參數以(GCS_RESULT|GCS_RESULTREAD)代替GCS_COMPxxx的消息。
<BR> 如果ImeSetCompositionString函數的lpComp參數有效,IME應該通過lpComp參數中的寫作字符串建立寫作屬性和子句信息,IME生成lParam參數為GCS_COMP的WM_IME_COMPOSITON消息。如果IME有SCS_CAP_MAKEREAD能力,IME應該同時建立解釋字符串,IME生成lParam參數為(GCS_COMP|GCS_COMPREAD)的WM_IME_COMPOSITION消息。有時IME需要自動確定建立上述信息,這種情況下,IME可以生成lParam參數以(GCS_RESULT|GCS_RESULTREAD)代替GCS_COMPxxx的消息。
<BR> 如果lpRead參數和lpComp參數同時有效,IME應該建立寫作字符串和解釋字符串,這時IME不需要完全按照lpRead參數和lpComp參數。如果IME不能建立應用程序指定的lpRead參數和lpComp參數之間的關系,IME應該修正寫作字符串,IME為新的寫作字符串和lpRead參數指定的解釋字符串建立屬性和子句信息,IME生成lParam參數為(GCS_COMP|GCS_COMPREAD)的WM_IME_COMPOSITION消息。有時IME需要自動完成建立上述信息,這種情況下,IME可以生成lParam參數以(GCS_RESULT|GCS_RESULTREAD)代替GCS_COMPxxx的消息。
<BR><BR>3、關于SCS_CHANGEATTR
<BR> SCS_CHANGEATTR只影響屬性信息,IME不應該更新寫作字符串、寫作字符串的子句信息、寫作字符串的解釋以及寫作字符串的解釋子句信息。
<BR>首先IME檢查新的屬性并判斷新的屬性是否可用,然后IME設置屬性到hIMC中的COMPOSITIONSTRING結構中,最后IME生成WM_IME_COMPOSITION消息。
<BR> 如果需要,IME可以更新候選信息并生成候選消息IMN_OPENCANDIDATE、IMN_CHANGECANDIDATA、IMN_CLOSECANDIDATE。IME不能確定寫作字符串。
<BR> 如果ImeSetCompositionString函數的lpRead參數有效,IME使用lpRead參數中的新屬性。IME也應該為當前寫作字符串建立寫作字符串的新屬性,這時子句信息不被修改。
<BR> 寫作字符串、屬性、子句信息、解釋字符串、解釋屬性和解釋子句信息必須有效。IME生成lParam參數為(GCS_COMP|GCS_COMPREAD)的WM_IME_COMPOSITION消息,如果IME不能接受lpComp參數中的新屬性,IME不需要生成任何消息并返回FALSE。
<BR> 如果ImeSetCompositionString函數的lpComp參數有效,IME使用lpComp參數中的新屬性,這時子句信息不被修改。
<BR> 如果IME有SCS_CAP_MAKEREAD能力,并且解釋字符串有效,IME應該為當前寫作字符串的解釋建立寫作字符串的解釋的新屬性。
<BR> 如果lpRead參數和lpComp參數同時有效,并且如果IME能夠接受新的信息,IME設置新的信息到hIMC中的COMPOSITION結構中并生成lParam參數為(GCS_COMP|GCS_COMPREAD)的WM_IME_COMPOSITION消息。
<BR><BR>4、關于SCS_CHANGECLAUSE
<BR> SCS_CHANGECLAUSE影響寫作字符串和寫作字符串的解釋的字符串和屬性。
<BR> 如果需要,IME可以更新候選信息并生成候選消息IMN_OPENCANDIDATE、IMN_CHANGECANDIDATA、IMN_CLOSECANDIDATE。IME不能確定寫作字符串。
<BR> 如果ImeSetCompositionString函數的lpRead參數有效,IME使用lpRead參數中的解釋子句信息。IME必須修正寫作字符串的解釋的屬性,IME可以更新寫作字符串、屬性和寫作字符串的子句信息,IME生成lParam參數為(GCS_COMP|GCS_COMPREAD)的WM_IME_COMPOSITION消息。
<BR> 如果ImeSetCompositionString函數的lpComp參數有效,IME使用新的子句信息。IME必須修正寫作字符串和寫作字符串的屬性,IME可以更新解釋屬性和解釋的子句信息,IME生成lParam參數為(GCS_COMP|GCS_COMPREAD)的WM_IME_COMPOSITION消息。
<BR> 如果lpRead參數和lpComp參數同時有效,并且如果IME能夠接受新的信息,IME設置新的信息到hIMC中的COMPOSITION結構中并生成lParam參數為(GCS_COMP|GCS_COMPREAD)的WM_IME_COMPOSITION消息。
<BR><BR>六、軟鍵盤 <BR><BR>1、關于軟鍵盤
<BR> 一些IME有特殊的解釋字符,例如一個IME可能使用注音符號作為解釋字符(這里指臺灣中文版Windows
95,即CWin95中的注音符號,PWin95中可能指漢語拼音字母或者音調符號——譯者注),另一個IME使用了一些字根符號(原文單詞是“radials”,但實際可能是“radicals”——譯者注)作為解釋字符,IME可以提供一個軟鍵盤顯示這些特殊解釋字符使得用戶不必逐鍵記憶解釋字符。
<BR> IME需要根據不同的變換狀態改變鍵表示的解釋字符,使用軟鍵盤可以通知用戶鍵的改變。在選擇候選字時,IME可以只顯示那些選擇鍵給用戶。
<BR><BR>2、使用軟鍵盤
<BR> IME可能需要為軟鍵盤創建一個更好的用戶界面,或者可能需要系統預定義的軟鍵盤,如果IME需要使用系統預定義的軟鍵盤,IME需要在調用ImeInquire函數時將IMEINFO結構的fdwUICaps成員指定為UI_CAP_SOFTKBD。
<BR> IME可以調用ImmCreateSoftKeyboard函數為軟鍵盤創建窗口,還可以調用ImmShowSoftKeyboard函數顯示或者隱藏軟鍵盤。軟鍵盤窗口是UI窗口的一個組件,所以軟鍵盤窗口應該附屬于UI窗口。
<BR> IME可能需要決定是否在無論何時焦點移走的情況下刪除窗口,軟鍵盤可能占有一些系統資源(可能需要釋放——譯者注)
<BR> 軟鍵盤有不同的類型,一種類型可能是為特定的國家或者特定的目的設計的。為每一種類型的軟鍵盤改變解釋字符的方式可能不同,有兩種改變解釋字符的方式:使用IMC_SETSOFKBDSUBTYPE或者IMC_SETSOFKBDDATA。不同類型的軟鍵盤有不同的窗口過程并存在不同的用戶界面給用戶。
<BR> <BR>七、IME接口 <BR> 在Windows
95中,IME與設備驅動程序一樣是動態鏈接庫(DLL),輸入法管理器(IMM)應該處理所有安裝的IME。因為IME在運行時是可以改變的,不需要重新啟動系統,IMM有一個結構用于維護每一個IME的所有入口點。IME函數列表是所有遠東版本Windows
95公共IME功能函數的描述,這些函數不應該在應用程序中直接調用。
<BR> <BR> UI窗口中的IMM函數
<BR> 下面是可以在UI窗口中調用的IMM函數:
<BR>ImmGetCompositionWindow <BR>ImmSetCompositionWindow
<BR>ImmGetCandidateWindow <BR>ImmSetCandidateWindow
<BR>ImmGetCompositionString <BR>ImmSetCompositionString
<BR>ImmGetCompositionFont <BR>ImmSetCompositionFont
<BR>ImmGetNumCandidateList <BR>ImmGetCandidateList
<BR>ImmGetGuideLine <BR>ImmGetConversionStatus
<BR>ImmGetConversionList <BR>ImmGetOpenStatus
<BR>ImmSetConversionStatus <BR>ImmSetOpenStatus
<BR>ImmNotifyIME <BR>ImmCreateSoftKeyboard
<BR>ImmDestroySoftKeyboard <BR>ImmShowSoftKeyboard
</P></TD></TR></TBODY></TABLE></TD></TR>
<TR>
<TD colSpan=2>
<TABLE
style="BORDER-TOP: #6687ba 1px solid; BORDER-BOTTOM: #6687ba 1px solid"
height=50 cellSpacing=5 cellPadding=0 width="100%" border=0>
<TBODY>
<TR>
<TD>
<LI>上一篇文章: <A
title="文章標題:一些國外的BCB編程資源網站 作 者:佚名 更新時間:2/19/2004 17:48:53 點擊次數:159"
href="http://www.9983.com/sunboy/newhome/Article_Show.asp?ArticleID=29">一些國外的BCB編程資源網站</A>
<BR>
<LI>下一篇文章: 沒有了 </LI></TD></TR></TBODY></TABLE></TD></TR>
<TR class=tdbg_leftall align=right>
<TD colSpan=2 height=20>【<A
href="http://www.9983.com/sunboy/newhome/Article_Comment.asp?ArticleID=48"
target=_blank>發表評論</A>】【<A
href="http://www.9983.com/sunboy/newhome/SendMail.asp?ArticleID=48"
target=_blank>告訴好友</A>】【<A
href="http://www.9983.com/sunboy/newhome/Article_Print.asp?ArticleID=48">打印此文</A>】【<A
href="javascript:window.close();">關閉窗口</A>】</TD></TR></TBODY></TABLE>
<TABLE cellSpacing=0 cellPadding=0 width="100%" align=center border=0>
<TBODY>
<TR>
<TD vAlign=top align=middle height=13>
<TABLE cellSpacing=0 cellPadding=0 width="99%" align=center
border=0>
<TBODY>
<TR>
<TD class=tdbg_left2
height=13></TD></TR></TBODY></TABLE></TD></TR></TBODY></TABLE></TD></TR>
<TR>
<TD class=tdbg_leftall vAlign=top colSpan=3>
<TABLE class=border cellSpacing=0 cellPadding=0 width="100%" align=center
bgColor=#ffffff border=0>
<TBODY>
<TR class=title>
<TD>
<TABLE cellSpacing=0 cellPadding=0 width="100%" border=0>
<TBODY>
<TR>
<TD class=title_maintxt><STRONG> <IMG height=16
src="輸入法編程指南.files/TEAM.gif" width=16
align=absMiddle> 網友評論:</STRONG>(只顯示最新10條。評論內容只代表網友觀點,與本站立場無關!)</TD></TR></TBODY></TABLE></TD></TR>
<TR>
<TD>
<TABLE height="100%" cellSpacing=5 cellPadding=0 width="100%"
border=0>
<TBODY>
<TR>
<TD vAlign=top> 沒有任何評論
</TD></TR></TBODY></TABLE></TD></TR></TBODY></TABLE></TD></TR></TBODY></TABLE>
<TABLE cellSpacing=0 cellPadding=0 width=778 align=center border=0>
<TBODY>
<TR>
<TD vAlign=top align=middle height=13></TD></TR></TBODY></TABLE>
<TABLE cellSpacing=0 cellPadding=0 width=778 align=center bgColor=#dddede
border=0>
<TBODY>
<TR>
<TD align=middle>
<TABLE style="FONT-FAMILY: verdana,arial" cellSpacing=0 cellPadding=0
width=750 align=center bgColor=#dddede border=0>
<TBODY>
<TR align=middle height=22>
<TD width=760 bgColor=#dddede>| <A
onclick="this.style.behavior='url(#default#homepage)';this.setHomePage('http://www.9983.com/sunboy/newhome/');"
href="http://www.9983.com/sunboy/newhome/Article_Show.asp?ArticleID=48#">設為首頁</A> | <A
href="javascript:window.external.addFavorite('http://www.9983.com/sunboy/newhome/','編程小站')">加入收藏</A> | <A
href="mailto:sdf110@sina.com.cn">聯系站長</A> | <A
href="http://www.9983.com/sunboy/newhome/FriendSite.asp"
target=_blank>友情鏈接</A> | <A
href="http://www.9983.com/sunboy/newhome/Copyright.asp"
target=_blank>版權申明</A> | <A
href="http://www.9983.com/sunboy/newhome/Admin_login.asp"
target=_blank>管理登錄</A> | </TD></TR>
<TR>
<TD width=760 background=輸入法編程指南.files/dot_line002.gif
height=1></TD></TR>
<TR vAlign=bottom align=middle height=20>
<TD width=760>版權所有 Copyright© 2004 <A
href="http://www.9983.com/">編程小站</A> 站長:<A
href="mailto:sdf110@sina.com.cn">Sunboy</A> 頁面執行時間:62.50毫秒<BR>本站所刊登的各種新聞﹑信息和各種專題專欄資料有部分為網上收集<BR>如果你認為侵犯了你的版權,請通知我們,我們馬上刪除。
<BR></TD></TR></TBODY></TABLE></TD></TR></TBODY></TABLE></BODY></HTML>
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -