鍵盤事件web
應用程序windows
|數組
|數據結構
Windowside
的函數
USER.EXE 字體
|ui
輸入法管理器this
|編碼
輸入法
鍵盤事件 應用程序
| |
Windows的USER.EXE
|
輸入法管理器
|
輸入法
要完成IME接口函數的設計,需用到windows系統提供的IMM函數(Input Method Manager)。
IMM函數能夠被IME接口函數使用,也可用於應用軟件直接管理IME。
相關術語:
(1)input method context 簡稱IMC--輸入法相關部分,在這裏解釋爲:相關連的應用程序(進程)
(2)component of the input context 簡稱IMCC--IMC的部件,是INPUTCONTEXT 結構的成員。
1、IME中使用的IMM函數清單
ImmGetCompositionWindow //取編碼窗口信息
ImmSetCompositionWindow //設置編碼窗口信息
ImmGetCandidateWindow //取選擇窗口信息
ImmSetCandidateWindow //設置選擇窗口信息
ImmGetCompositionString //取編碼窗口的某一信息
ImmSetCompositionString //設置編碼窗口的某一信息
ImmGetCompositionFont //取編碼字體
ImmSetCompositionFont //設置編碼字體
ImmGetNumCandidateList //取選擇區中編碼數
ImmGetCandidateList //取選擇區中編碼
ImmGetGuideLine
ImmGetConversionStatus //取當前輸入法的狀態(ACSII,SHAPE,FULL等)
ImmGetConversionList //從新得到選擇區轉換表
ImmGetOpenStatus //取輸入法打開屬性
ImmSetConversionStatus //設置輸入法狀態
ImmSetOpenStatus //設置輸入法打開狀態
ImmNotifyIME //通報IME,輸入法狀態被改變
ImmGenerateMessage //將咱們的漢字串法發送到與當前輸入法相關聯的應用軟件中
ImmRequestMessage //嚮應用程序發送WM_IME_REQUEST
ImmLockIMC //獲取當前IMC的INPUTCONTEXT結構信息,增長IMC 計數器
ImmUnlockIMC //釋放IMC計數器
ImmGetIMCLockCount //取計數器值
ImmCreateIMCC //建立INPUTCONTEXT結構的一個成員
ImmDestroyIMCC //刪除IMC成員緩衝區
ImmLockIMCC //取IMCC緩衝地址,同時使IMCC的計數器值增長
ImmUnlockIMCC //遞減IMCC計數器
ImmReSizeIMCC //從新設置IMC的成員的緩衝區大小
ImmGetIMCCSize //取IMC成員的緩衝區大小
ImmGetIMCCLockCount //返回IMC計數器值
ImmGetHotKey //取輸入法狀態鍵,該函數供控制面板使用
ImmSetHotKey //設置輸入法的熱鍵
ImmCreateSoftKeyboard //產生一個軟鍵盤
ImmDestroySoftKeyboard //銷燬軟鍵盤
ImmShowSoftKeyboard //顯示或隱藏軟鍵盤
2、IMM函數使用格式說明
一、BOOL WINAPI ImmGenerateMessage( //將咱們的漢字串法發送到與當前輸入法相關聯的應用軟件中
HIMC hIMC //與當前輸入法相關聯的應用軟件的句柄,
//該結構的hMsgBuf項即爲漢字串消息
)
成功爲TRUE,不然爲FALSE
二、LRESULT WINAPI ImmRequestMessage( //嚮應用程序發送WM_IME_REQUEST
//只是用於w98及w2000
HIMC hIMC, //與當前輸入法相關聯的應用軟件的句柄
WPARAM wParam, //與WM_IME_REQUEST相關的wP
LPARAM lParam //與WM_IME_REQUEST相關的LP
//=IMR_COMPOSITIONWINOW
//=IMR_CANDIDATEWINDOW
//=IMR_COMPOSITIONFONT
//=IMR_RECONVERTSTRING
//=IMR_CONFIRMRECONVERTSTRING
//=IMR_QUERYCHARPOSITION
//=IMR_DOCUMENTFEED
)
三、LPINPUTCONTEXT WINAPI ImmLockIMC( //獲取當前IMC的INPUTCONTEXT結構信息,增長IMC 計數器
HIMC hIMC //當前應用程序句柄
)
成功返回INPUTCONTEXT 結構指針,不然爲NULL
四、BOOL WINAPI ImmUnlockIMC( //釋放IMC計數器
HIMC hIMC //當前應用程序句柄
)
返回:若是IMC計數器被減小到0了,返回FALSE,不然爲TRUE.
注意:ImmLockIMC與ImmUnlockIMC必須成對出現,必須是相同的HIMC
五、HIMCC WINAPI ImmGetIMCLockCount( //取計數器值
HIMC hIMC //當前應用程序句柄
)
若是成功返回HIMC的計數器值,不然爲NULL.
六、HIMCC WINAPI ImmCreateIMCC( //建立INPUTCONTEXT結構的一個成員
DWORD dwSize //成員的緩衝區長度
)
若是成功返回IMC的成員句柄,不然爲NULL
七、HIMCC WINAPI ImmDestroyIMCC( //刪除IMC成員緩衝區
HIMCC hIMCC //被刪除的IMC的成員
)
若是成功返回NULL,不然等於該HIMCC.
八、LPVOID WINAPI ImmLockIMCC( //取IMCC緩衝地址,同時使IMCC的計數器值增長
HIMCC hIMCC //IMC成員句柄
)
If the function is successful, the return value is the pointer for the IMC component. Otherwise, the return value is NULL.
九、BOOL WINAPI ImmUnlockIMCC( //遞減IMCC計數器
HIMCC hIMCC //IMC成員句柄
)
若是IMCC的計數器值爲零,則返回 FALSE,不然爲TRUE.
十、HIMCC WINAPI ImmReSizeIMCC( //從新設置IMC的成員的緩衝區大小
HIMCC hIMCC, //IMC的成員句柄
DWORD dwSize //新緩衝區大小
)
若是成功,返回新的HIMCC,不然爲 NULL.
十一、DWORD WINAPI ImmGetIMCCSize( //取IMC成員的緩衝區大小
HIMCC hIMCC //IMC成員句柄
)
返回IMC成員的緩衝區大小
十二、DWORD WINAPI ImmGetIMCCLockCount( //返回IMC計數器值
HIMCC hIMCC //IMC成員的句柄
)
成功返回該IMCC的計數器值,不然爲0
1三、BOOL WINAPI ImmGetHotKey( //取輸入法狀態鍵,該函數供控制面板使用
DWORD dwHotKeyID,
LPUINT lpuModifiers,
LPUINT lpuVKey,
LPHKL lphKL
)
1四、BOOL WINAPI ImmSetHotKey( //設置輸入法的熱鍵
DWORD dwHotKeyID,
UINT uModifiers,
UINT uVKey,
hKL hKL
)
1五、HWND WINAPI ImmCreateSoftKeyboard( //產生一個軟鍵盤
UINT uType, //軟件盤上的鍵碼含義的定義方式
//=SOFTKEYBOARD_TYPE_T1
//=SOFTKEYBOARD_TYPE_C1
UINT hOwner, //該輸入法的UI窗口
int x, //定位座標
int y //定位座標
)
成功返回軟鍵盤的窗口句柄
1六、BOOL WINAPI ImmDestroySoftKeyboard( //銷燬軟鍵盤
HWND hSoftKbdWnd //軟年盤窗口句柄
)
成功爲TRUE,法哦則爲FALSE.
1七、BOOL WINAPI ImmShowSoftKeyboard( //顯示或隱藏軟鍵盤
HWND hSoftKbdWnd, //軟年盤窗口句柄
int nCmdShow //窗口狀態=SW_HIDE 表示隱藏,=SW_SHOWNOACTIVATE表示顯示
)
如構成功返回 TRUE. 不然爲 FALSE.
3、IME必須使用的結構
前二章咱們講述了IME和IMM函數,兩者之間是靠下列結構通信的。
一、IMEINFO
struct tagIMEInfo { //輸入法的接口信息 用於ImeInquire函數中
DWORD dwPrivateDataSize;//用戶設計的數據結構的字節數
DWORD fdwProperty; //輸入法對鍵盤事件的相應特性
//其中其高字可爲下列字節位的組合:
//=IME_PROP_AT_CARET 轉換窗口是否放置在需插入字符的位置
//=IME_PROP_SPECIAL_UI 該輸入法具備特殊用戶接口
//=IME_PROP_CANDLIST_START_FROM_1 輸入法的選擇窗口中漢字串的起始序號爲1
//=IME_PROP_UNICODE 支持UNICODE字符
//其中其低字可爲下列字節位的組合:
//=IME_PROP_END_UNLOAD
//=IME_PROP_KBD_CHAR_FIRST 首先由鍵盤轉換字符
//=IME_PORP_NEED_ALTKEY 將ALT鍵盤事件傳送到IME輸入法內
//=IME_PROP_IGNORE_UPKEYS 禁止上位鍵事件進入輸入法內
//=IME_PROP_COMPLETE_ON_UNSELECT 當關閉輸入法時,完成編碼的轉換
// 用於 W98及2000 中
DWORD fdwConversionCaps;//當前輸入法具備的功能特性,若有軟鍵、標點、中西文切換等功能
//=IME_CMODE_NATIVE 設置活動模式
//=IME_CMODE_FULLSHAPE 設置全角模式
//=IME_CMODE_CHARCODE 設置爲字符模式
//=IME_CMODE_SOFTKBD //設置軟鍵盤模式
//=IME_CMODE_NOCONVERSION //不支持模式變換
//=IME_CMODE_EUDC //
//=IME_CMODE_SYMBOL //設置標點字符模式
DWORD fdwSentenceCaps; //
//=IME_SMODE_PLAURALCLAUSE
//=IME_SMODE_SINGLECONVERT
//=IME_SMODE_AUTOMETIC
//=IME_SMODE_CONVERSATION
DWORD fdwUICaps; // 用戶界面能力:支持軟鍵盤等
//=UI_CAP_2700
//=UI_CAP_ROT90
//=UI_CAP_ROTANY
//=UI_CAP_SOFKBD
DWORD fdwSCSCaps; // 用戶設置編碼串的能力
//=SCS_CAP_COMPSTR
//=SCS_CAP_MAKEREAD
DWORD fdwSelectCaps; // 輸入法切換時是否使用之前輸入法的模式
//=SELECT_CAP_CONVMODE
//=SELECT_CAP_SENTENCE
} IIMEINFO;
二、COMPOSITIONSTR 用於編碼管理
typedef struct tagCOMPOSITIONSTR { //用於存放編碼信息的信息:全部的實際信息放在本結構的後面
DWORD dwSize; //當前編碼信息須要的存儲空間=讀入的編碼+屬性+子串+屬性+編碼+屬性+結果+屬性
DWORD dwCompReadAttrLen; //讀入的編碼屬性長度
DWORD dwCompReadAttrOffset; //存放在內存的位置
DWORD dwCompReadClsLen; //讀入的子串長度
DWORD dwCompReadClsOffset; //存放在內存的位置
DWORD dwCompReadStrLen; //讀入的編碼長度
DWORD dwCompReadStrOffset; //存放在內存的位置
DWORD dwCompAttrLen; //編碼屬性長度
DWORD dwCompAttrOffset; //存放在內存的位置
DWORD dwCompClsLen; //編碼子串長度
DWORD dwCompClsOffset; //存放在內存的位置
DWORD dwCompStrLen; //編碼串長度
DWORD dwCompStrOffset; //存放在內存的位置
DWORD dwCursorPos; //當前光標位置
DWORD dwDeltaStart; //被修改編碼的位置
DWORD dwResultReadClsLen; //讀入結果子串長度
DWORD dwResultReadClsOffset; //存放在內存的位置
DWORD dwResultReadStrLen; //讀入的編碼長度
DWORD dwResultReadStrOffset; //存放在內存的位置
DWORD dwResultClsLen; //結果子串長度
DWORD dwResultClsOffset; //存放在內存的位置
DWORD dwResultStrLen; //結果串長度
DWORD dwResultStrOffset; //存放在內存的位置
DWORD dwPrivateSize; //用戶自定義數據長度
DWORD dwPrivateOffset; //存放在內存的位置
} COMPOSITIONSTR;
三、CANDIDATEINFO 用於編碼選擇管理
typedef struct tagCANDIDATEINFO { //編碼選擇信息的信息,其後爲實際編碼列表數據
DWORD dwSize; //數據所佔內存大小
DWORD dwCount; //表馬列表個數
DWORD dwOffset[32]; //各個編碼列表的內存位置
DWORD dwPrivateSize; //自定義數據尺寸
DWORD dwPrivateOffset; //緩衝區位置
} CANDIDATEINFO;
四、GUIDELINE
typedef struct tagGUIDELINE {
DWORD dwSize;
DWORD dwLevel; // the error level.
// GL_LEVEL_NOGUIDELINE,
// GL_LEVEL_FATAL,
// GL_LEVEL_ERROR,
// GL_LEVEL_WARNNING,
// GL_LEVEL_INFORMATION
DWORD dwIndex; // GL_ID_NODICTIONARY and so on.
DWORD dwStrLen; // Error Strings, if this is 0, there
// is no error string.
DWORD dwStrOffset;
DWORD dwPrivateSize;
DWORD dwPrivateOffset;
} GUIDELINE;
五、CANDIDATELIST
The CANDIDATELIST structure contains information about a candidate list.
typedef struct tagCANDIDATELIST { //編碼選擇列表信息 =〉管理編碼窗口中的列表信息
DWORD dwSize; // 用字節表示的內存大小:=sizeof(CANDIDATELIST)+選擇字符數據
DWORD dwStyle; // 列表串的取值方式
//=IME_CAND_UNKNOWN 列表數據的格式無定義
//=IME_CAND_READ 讀到什麼數據即爲何數據,通常咱們使用該屬性
//=IME_CAND_CODE 若是dwCount=1,dwOffset不是地址,而是實際數據,
// >1 dwOffset 表示地址
//=IME_CAND_MEANING
//=IME_CAND_RADICAL
//=IME_CAND_STROKES
DWORD dwCount; // 當前列表個數
DWORD dwSelection; // 當前選擇的列表序號
DWORD dwPageStart; // 在列表窗口中所顯示的列表的起始序號(上下翻頁時用)
DWORD dwPageSize; // 一頁顯示的列表個數
DWORD dwOffset[]; // 列表數據存放區地址:[阿];[大]。。。。
} CANDIDATELIST;
六、COMPOSITIONFORM
typedef tagCOMPOSITIONFORM { //窗口位置、大小信息:
//由IMC_SETCOMPOSITIONWINDOW和IMC_SETCANDIDATEPOS消息使用
DWORD dwStyle; //管理窗口方式
//=CFS_DEFAULT 將編碼窗口顯示到隱含的位置
//=CFS_FORCE_POSITION // 以給定的座標顯示窗口,不受IME控制
//=CFS_POINT // 以給定的座標顯示窗口,受IME控制
//=CFS_RECT //以給定的大小顯示窗口
POINT ptCurrentPos; //給定座標
RECT rcArea; //給定窗口的小
}COMPOSITIONFORM;
七、CANDIDATEFORM
The CANDIDATEFORM structure is used for IMC_GETCANDIDATEPOS and IMC_SETCANDIDATEPOS messages.
typedef tagCANDIDATEFORM { //列表窗口信息
//由IMC_GETCANDIDATEPOS和IMC_SETCANDIDATEPOS消息處理
DWORD dwIndex; //列表窗口序號
DWORD dwStyle; //屬性:
//=CFS_CANDIDATEPOS 指定顯示位置
//=CFS_EXCLUDE 不可顯示
//=CFS_DEFAULT 根據須要顯示
POINT ptCurrentPos; //座標位置
REC rcArea; //不可顯示區
} CANDIDATEFORM;
八、STYLEBUF
typedef struct tagSTYLEBUF { //註冊字結構
DWORD dwStyle;
TCHAR szDes cription[32]
} STYLEBUF;
九、SOFTKBDDATA
typedef struct tagSOFTKBDDATA { //軟鍵盤中各鍵對應的漢字
UINT uCount; //鍵碼數組個數(能夠爲1,2,當區分SHIFT鍵時爲2,即:一組帶SHIFT,一組不帶SHIFT)
WORD wCode[][256] //對應的鍵碼數據
} SOFTKBDDATA;
十、RECONVERTSTRING
typedef struct _tagRECONVERTSTRING { //用於W98和2000
DWOPD dwSize;
DWORD dwVersion;
DWORD dwStrLen;
DWORD dwStrOffset;
DWORD dwCompStrLen;
DWORD dwCompStrOffset;
DWORD dwTargetStrLen;
DWORD dwTargetStrOffset;
} RECONVERTSTRING;
十一、IMEMENUITEMINFO
typedef _tagIMEMENUITEMINFO { //輸入法菜單結構,W98/2000
UINT cbSize;
UINT fType;
UINT fState;
UINT wID;
HBITMAP hbmpChecked;
HBITMAP hbmpUnchecked;
DWORD dwItemData;
TCHAR szString[48];
HBITMAP hbmpItem;
}
十二、INPUTCONTEXT
The INPUTCONTEXT structure is an internal data structure that stores Input Context data.
typedef struct tagINPUTCONTEXT { //IMC 數據存放區
HWND hWnd; //使用該IMC的窗口
BOOL fOpen; //IME的打開與關閉狀態
POINT ptStatusWndPos; //狀態窗口的位置
POINT ptSoftKbdPos; //軟鍵盤的位置
DWORD fdwConversion; //IME狀態(活動、不活動,全角等)
DWORD fdwSentence; //編碼方式
union {
LOGFONTA A;
LOGFONTW W;
} lfFont; //字體
COMPOSITIONFORM cfCompForm; //編碼格式結構
CANDIDATEFORM cfCandForm[4]; //列表選擇結構
HIMCC hCompStr; //
HIMCC hCandInfo;
HIMCC hGuideLine
HIMCC hPrivate;
DWORD dwNumMsgBuf; //存放在hMsgBuf中的消息數
HIMCC hMsgBuf; //存放的消息,格式: [消息1] [wParam1] [lParam1] {[消息] [wParam2] [lParam2]...
//注意:咱們輸入的漢字串存放在這裏
DWORD fdwInit //系統根據此值來初始本結構相應的信息
//=INIT_STATUSWNDPOS 初始化ptStatusWndPos
//=INIT_CONVERSION 初始化fdwConversion
//=INIT_SENTENCE 初始化fdwSentence
//=INIT_LOGFONT 初始化lfFont
//=INIT_COMPFORM 初始化cfCompForm
//=INIT_SOFTKBDPOS 初始化ptSoftKbdPos
DWORD dwReserve[3]; //未來版本擴展的信息
} INPUTCONTEXT;
4、在UI窗口下須要處理下列windows消息.
一、WM_IME_SETCONTEXT
激活或休眠輸入法
LRESULT CALLBACK UIWndProc(HWND hUIWnd,UINT uMsg,WPARAM wParam,LPARAM lParam)
{
:
case WM_IME_SETCONTEXT:
fSet = (BOOL) wParam;
lISCBits = lParam;
}
若是fSet爲TRUE,系統將激活當前輸入法的某個窗口(狀態窗、列表窗等),爲FALSE時休眠當前輸入法.
其中lISCBits中指出對哪一個窗口操做。
數值 含義
ISC_SHOWUICOMPOSITIONWINDOW 顯示編碼窗口
ISC_SHOWUIGUIDWINDOW 顯示信息窗口
ISC_SHOWUICANDIDATEWINDOW 顯示0號列表窗口
(ISC_SHOWUICANDIDATEWINDOW << 1) 顯示1號列表窗口.
(ISC_SHOWUICANDIDATEWINDOW << 2) 顯示2號列表窗口.
(ISC_SHOWUICANDIDATEWINDOW << 3) 顯示3號列表窗口.
二、WM_IME_CONTROL
管理當前輸入法
wSubMessage = wParam; 受WM_IME_CONTROL 控制的消息
lpData = (LPVOID) lParam; 對應的數據
其中子消息有下列消息:
1)IMC_GETCANDIDATEPOS
獲取列表窗口的位置.此時lParam傳送的是CANDIDATEFORM結構地址。
若是此消息成功返回0,不然非零。
一般若是你設計此部分了,返回0。不然返回1。
2)IMC_GETCOMPOSITONFONT
獲取編碼窗口字體結構, lParam爲LOGFONT結構地址
若是此消息成功返回0,不然非零。
一般若是你設計此部分了,返回0。不然返回1。
3)IMC_GETCOMPOSITONWINDOW
獲取編碼窗口位置,lParam爲COMPOSITIONFORM結構地址。
若是此消息成功返回0,不然非零。
一般若是你設計此部分了,返回0。不然返回1。
4)IMC_GETSOFTKBDFONT
獲取軟鍵盤字體。 lParam字體結構LOGFONT地址。
5)IMC_GETSOFTKBDPOS
獲取軟鍵盤位置,lParam = 0;
返回軟鍵盤在屏幕窗口中的座標結構POINTS。
6)IMC_GETSOFTKBDSUBTYPE
wSubMessage = IMC_GETSOFTKBDSUBTYPE;
lParam = 0;
7)IMC_GETSTATUSWINDOWPOS
獲取狀態窗口位置
wSubMessage = IMC_GETSTATUSWINDOWPOS;
lParam = 0;
返回狀態窗口座標原點在屏幕窗口中的座標結構POINTS。
8)IMC_SETCANDIDATEPOS
wSubMessage = IMC_SETCANDIDATEPOS;
lpCANDIDATEFORM = (LPCANDIDATEFORM) lParam;
設置列表窗口的位置.此時lParam傳送的是CANDIDATEFORM結構地址。
若是此消息成功返回0,不然非零。
注意:UI窗口不接受此消息,它的管理函數是NotifyIME。
9)IMC_SETCOMPOSITONFONT
設置編碼窗口的字體.此時lParam傳送的是LOGFONT結構地址。
wSubMessage = IMC_SETCOMPOSITIONFONT;
lpLogFont = (LPLOGFONT) lParam;
注意:UI窗口不接受此消息,它的管理函數是NotifyIME。
10)IMC_SETCOMPOSITONWINDOW
設置編碼窗口屬性,此時lParam傳送的是COMPOSITIONFORM結構地址。
wSubMessage = IMC_SETCOMPOSITIONWINDOW;
lpCOMPOSITIONFORM = (LPCOMPOSITIONFORM) lParam;
若是此消息成功返回0,不然非零。
注意:UI窗口不接受此消息,它的管理函數是NotifyIME。
11)IMC_SETSOFTKBDDATA
設置軟鍵盤數據,此時lParam傳送的是SOFTKBDDATA結構地址,用戶設定本身的軟鍵盤字符。
wSubMessage = IMC_SETSOFTKBDDATA;
lpSoftKbdData = (LPSOFTKBDDATA) lParam;
若是此消息成功返回0,不然非零。
注意:UI窗口不接受此消息,它的管理函數是NotifyIME。
12)IMC_SETSOFTKBDSUBTYPE
設置軟鍵盤類型
wSubMessage = IMC_SETSOFTKBDSUBTYPE;
lSubType = lParam;
成功返回subtype,不然返回-1.
注意:UI窗口不接受此消息,它的管理函數是NotifyIME。
13)IMC_SETSOFTKBDFONT
設置軟鍵盤字體,此時lParam傳送的是LOGFONT結構地址
wSubMessage = IMC_SETSOFTKBDFONT;
lpLogFont = (LPLOGFONT)lParam;
若是此消息成功返回0,不然非零。
注意:UI窗口不接受此消息,它的管理函數是NotifyIME。
14)IMC_SETSOFTKBDPOS
設置軟件位置,此時lParam傳送的是POINTS結構
wSubMessage = IMC_SETSOFTKBDPOS;
ptsPt = (POINTS)lParam;
若是此消息成功返回0,不然非零。
15)IMC_SETSTATUSWINDOWPOS
設置狀態窗口位置,此時lParam傳送的是POINTS結構
wSubMessage = IMC_SETSTATUSWINDOWPOS;
ptsPt = (POINTS)lParam;
若是此消息成功返回0,不然非零。
三、WM_IME_COMPOSITION
當用戶改變了編碼狀態時,發送此消息WM_IME_COMPOSITION
應用程序能夠經過調用ImmGetCompositionString獲取新的編碼狀態。
wChar = wParam; 最後輸入到編碼窗口的2字節的DBCS字符
lAttribute = lParam; 當前編碼的含義。
lAttribute可取下列值得組合:
值 含義
GCR_ERRORSTR 修正錯誤
GCR_INFORMATIONSTR 修正信息串
GCS_COMPATTR 修正編碼串屬性.
GCS_COMPCLAUSE 修正編碼信息.
GCS_COMPREADATTR 修正讀入串的屬性
GCS_COMPREADCLAUSE 修正讀入串的屬性.
GCS_COMPREADSTR 修正讀入串。
GCS_COMPSTR 修正當前的編碼
GCS_CURSORPOS 修正當前編碼的光標位置.
GCS_DELTASTART 修正當前編碼的開始位置
GCS_RESULTCLAUSE 修正結果串的信息.
GCS_RESULTREADCLAUSE 修正讀入串的信息.
GCS_RESULTREADSTR 修正讀入串.
GCS_RESULTSTR 修正編碼結果串.
CS_INSERTCHAR 在當前位置插入一個字符
CS_NOMOVECARET 替換結果串
四、WM_IME_COMPOSITIONFULL
用戶接口窗口不能增長編碼窗口的尺寸時,ime用戶接口窗口將發送WM_IME_COMPOSITIONFULL消息,可不處理。
wParam = 0
lParam = 0
五、WM_IME_ENDCOMPOSITION
當編碼結束時ime發送此消息WM_IME_ENDCOMPOSITION
wParam = 0
lParam = 0
用戶程序能夠接受此消息,以便本身顯示用戶輸入的編碼。
六、WM_IME_SELECT
系統發出WM_IME_SELECT以便選擇一個新的ime。
fSelect = (BOOL)wParam; TRUE表示新的IME已選擇,FALSE表示不被選擇或關閉該輸入法。
hKL = lParam;
系統利用這個消息產生或關閉老的輸入法用戶窗口。
七、WM_IME_STARTCOMPOSITION
當用戶開始輸入編碼時,系統當即發送該消息到IME中,IME打開編碼窗口。
wParam = 0
lParam = 0
八、WM_IME_NOTIFYIME消息組:wSubMessage = wParam;lParam = lParam;各消息說明:1)IMN_CLOSESTATUSWINDOW關閉狀態窗口時,系統發送IMN_CLOSESTATUSWINDOW消息。wSubMessage = IMN_CLOSESTATUSWINDOW;lParam = 0;當用戶接口窗口接收到此消息時,將關閉狀態窗口。2)IMN_OPENSTATUSWINDOW產生或打開狀態窗口wSubMessage = IMN_OPENSTATUSWINDOW;lParam = 0;當ime接收到此消息時,將產生狀態窗口.有關狀態串口的信息可用ImmGetConversionStatus獲取,設置狀態窗口的信息可用ImmSetConversionStatus.3)IMN_OPENCANDIDATE打開或產生列表選擇窗口wSubMessage = IMN_OPENCANDIDATE;lCandidateList = lParam;4)IMN_CHANGECANDIDATE更新當前的列表選擇窗口WM_IME_NOTIFYwSubMessage = IMN_CHANGECANDIDATE;lCandidateList = lParam;5)IMN_CLOSECANDIDATE關閉選擇窗口wSubMessage = IMN_CLOSECANDIDATE;lCandidateList= lParam;UI窗口接收此消息後,將銷燬列表選擇窗口IMN_SETCONVERSIONMODE改變輸入法狀態模式管理wSubMessage = IMN_SETCONVERSIONMODE;lParam = 0;IMN_SETOPENSTATUS設置輸入法狀態wSubMessage = IMN_SETOPENSTATUS;lParam = 0;IMN_SETCANDIDATEPOS設置列表窗口位置wSubMessage = IMN_SETCANDIDATEPOS;lCandidateList= lParam;ParametersIMN_SETCOMPOSITIONFONT設置編碼窗口字體wSubMessage = IMN_SETCOMPOSITIONFONT;lParam = 0;IMN_SETCOMPOSITIONWINDOW設置編碼窗口wSubMessage = IMN_SETCOMPOSITIONWINDOW;lParam = 0;IMN_GUIDELINE錯誤信息處理wSubMessage = IMN_GUIDELINE;lParam = 0;IMN_SOFTKBDDESTROYED關閉軟鍵盤wSubMessage = IMN_SOFTKBDDESTROYED;lParam = 0;