xref: /reactos/sdk/include/psdk/imm.h (revision 3fb5957d)
1 /*
2  * Declarations for IMM32
3  *
4  * Copyright (C) the Wine project
5  *
6  * This library is free software; you can redistribute it and/or
7  * modify it under the terms of the GNU Lesser General Public
8  * License as published by the Free Software Foundation; either
9  * version 2.1 of the License, or (at your option) any later version.
10  *
11  * This library is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
14  * Lesser General Public License for more details.
15  *
16  * You should have received a copy of the GNU Lesser General Public
17  * License along with this library; if not, write to the Free Software
18  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
19  */
20 
21 #ifndef __WINE_IMM_H
22 #define __WINE_IMM_H
23 
24 #ifdef __cplusplus
25 extern "C" {
26 #endif
27 
28 #ifdef __REACTOS__
29 DECLARE_HANDLE(HIMC);
30 DECLARE_HANDLE(HIMCC);
31 typedef HKL *LPHKL;
32 #else
33 typedef HANDLE HIMC;
34 typedef HANDLE HIMCC;
35 #endif
36 
37 typedef struct tagREGISTERWORDA {
38     LPSTR lpReading;
39     LPSTR lpWord;
40 } REGISTERWORDA, *PREGISTERWORDA, *NPREGISTERWORDA, *LPREGISTERWORDA;
41 
42 typedef struct tagREGISTERWORDW {
43     LPWSTR lpReading;
44     LPWSTR lpWord;
45 } REGISTERWORDW, *PREGISTERWORDW, *NPREGISTERWORDW, *LPREGISTERWORDW;
46 
47 typedef int
48 (CALLBACK *REGISTERWORDENUMPROCA)(
49   _In_ LPCSTR,
50   _In_ DWORD,
51   _In_ LPCSTR,
52   _In_ LPVOID);
53 
54 typedef int
55 (CALLBACK *REGISTERWORDENUMPROCW)(
56   _In_ LPCWSTR,
57   _In_ DWORD,
58   _In_ LPCWSTR,
59   _In_ LPVOID);
60 
61 typedef struct tagCANDIDATEFORM
62 {
63 				DWORD   dwIndex;
64 				DWORD   dwStyle;
65 				POINT ptCurrentPos;
66 				RECT  rcArea;
67 } CANDIDATEFORM, *LPCANDIDATEFORM;
68 
69 typedef struct tagCANDIDATELIST
70 {
71 				DWORD dwSize;
72 				DWORD dwStyle;
73 				DWORD dwCount;
74 				DWORD dwSelection;
75 				DWORD dwPageStart;
76 				DWORD dwPageSize;
77 				DWORD dwOffset[1];
78 } CANDIDATELIST, *LPCANDIDATELIST;
79 
80 typedef struct tagSTYLEBUFA
81 {
82 				DWORD dwStyle;
83 				CHAR  szDescription[32];
84 } STYLEBUFA, *LPSTYLEBUFA;
85 
86 typedef struct tagSTYLEBUFW
87 {
88 				DWORD dwStyle;
89 				WCHAR  szDescription[32];
90 } STYLEBUFW, *LPSTYLEBUFW;
91 
92 DECL_WINELIB_TYPE_AW(STYLEBUF)
93 DECL_WINELIB_TYPE_AW(LPSTYLEBUF)
94 
95 typedef struct tagRECONVERTSTRING
96 {
97 	DWORD	dwSize;
98 	DWORD	dwVersion;
99 	DWORD	dwStrLen;
100 	DWORD	dwStrOffset;
101 	DWORD	dwCompStrLen;
102 	DWORD	dwCompStrOffset;
103 	DWORD	dwTargetStrLen;
104 	DWORD	dwTargetStrOffset;
105 } RECONVERTSTRING, *LPRECONVERTSTRING;
106 
107 
108 #define IMEMENUITEM_STRING_SIZE 80
109 
110 typedef struct tagIMEMENUITEMINFOA
111 {
112 	UINT		cbSize;
113 	UINT		fType;
114 	UINT		fState;
115 	UINT		wID;
116 	HBITMAP		hbmpChecked;
117 	HBITMAP		hbmpUnchecked;
118 	DWORD		dwItemData;
119 	CHAR		szString[IMEMENUITEM_STRING_SIZE];
120 	HBITMAP		hbmpItem;
121 } IMEMENUITEMINFOA, *LPIMEMENUITEMINFOA;
122 
123 typedef struct tagIMEMENUITEMINFOW
124 {
125 	UINT		cbSize;
126 	UINT		fType;
127 	UINT		fState;
128 	UINT		wID;
129 	HBITMAP		hbmpChecked;
130 	HBITMAP		hbmpUnchecked;
131 	DWORD		dwItemData;
132 	WCHAR		szString[IMEMENUITEM_STRING_SIZE];
133 	HBITMAP		hbmpItem;
134 } IMEMENUITEMINFOW, *LPIMEMENUITEMINFOW;
135 
136 DECL_WINELIB_TYPE_AW(IMEMENUITEMINFO)
137 DECL_WINELIB_TYPE_AW(LPIMEMENUITEMINFO)
138 
139 typedef struct tagIMECHARPOSITION {
140     DWORD       dwSize;
141     DWORD       dwCharPos;
142     POINT       pt;
143     UINT        cLineHeight;
144     RECT        rcDocument;
145 } IMECHARPOSITION, *PIMECHARPOSITION, *NPIMECHARPOSITION, *LPIMECHARPOSITION;
146 
147 typedef BOOL    (CALLBACK* IMCENUMPROC)(HIMC, LPARAM);
148 
149 typedef struct _tagCOMPOSITIONFORM
150 {
151 				DWORD   dwStyle;
152 				POINT ptCurrentPos;
153 				RECT  rcArea;
154 } COMPOSITIONFORM, *LPCOMPOSITIONFORM;
155 
156 typedef struct _tagIMEINFO {
157     DWORD       dwPrivateDataSize;
158     DWORD       fdwProperty;
159     DWORD       fdwConversionCaps;
160     DWORD       fdwSentenceCaps;
161     DWORD       fdwUICaps;
162     DWORD       fdwSCSCaps;
163     DWORD       fdwSelectCaps;
164 } IMEINFO, *LPIMEINFO;
165 
166 typedef struct tagCOMPOSITIONSTRING {
167     DWORD dwSize;
168     DWORD dwCompReadAttrLen;
169     DWORD dwCompReadAttrOffset;
170     DWORD dwCompReadClauseLen;
171     DWORD dwCompReadClauseOffset;
172     DWORD dwCompReadStrLen;
173     DWORD dwCompReadStrOffset;
174     DWORD dwCompAttrLen;
175     DWORD dwCompAttrOffset;
176     DWORD dwCompClauseLen;
177     DWORD dwCompClauseOffset;
178     DWORD dwCompStrLen;
179     DWORD dwCompStrOffset;
180     DWORD dwCursorPos;
181     DWORD dwDeltaStart;
182     DWORD dwResultReadClauseLen;
183     DWORD dwResultReadClauseOffset;
184     DWORD dwResultReadStrLen;
185     DWORD dwResultReadStrOffset;
186     DWORD dwResultClauseLen;
187     DWORD dwResultClauseOffset;
188     DWORD dwResultStrLen;
189     DWORD dwResultStrOffset;
190     DWORD dwPrivateSize;
191     DWORD dwPrivateOffset;
192 } COMPOSITIONSTRING, *LPCOMPOSITIONSTRING;
193 
194 typedef struct tagGUIDELINE {
195     DWORD dwSize;
196     DWORD dwLevel;
197     DWORD dwIndex;
198     DWORD dwStrLen;
199     DWORD dwStrOffset;
200     DWORD dwPrivateSize;
201     DWORD dwPrivateOffset;
202 } GUIDELINE, *LPGUIDELINE;
203 
204 typedef struct tagCANDIDATEINFO {
205     DWORD               dwSize;
206     DWORD               dwCount;
207     DWORD               dwOffset[32];
208     DWORD               dwPrivateSize;
209     DWORD               dwPrivateOffset;
210 } CANDIDATEINFO, *LPCANDIDATEINFO;
211 
212 /* IME Property bits */
213 #define IME_PROP_END_UNLOAD             0x0001
214 #define IME_PROP_KBD_CHAR_FIRST         0x0002
215 #define IME_PROP_IGNORE_UPKEYS          0x0004
216 #define IME_PROP_NEED_ALTKEY            0x0008
217 #define IME_PROP_NO_KEYS_ON_CLOSE       0x0010
218 #define IME_PROP_ACCEPT_WIDE_VKEY       0x0020
219 
220 /* for NI_CONTEXTUPDATED */
221 #define IMC_SETCONVERSIONMODE           0x0002
222 #define IMC_SETSENTENCEMODE             0x0004
223 #define IMC_SETOPENSTATUS               0x0006
224 
225 /* dwAction for ImmNotifyIME */
226 #define NI_CONTEXTUPDATED               0x0003
227 #define NI_OPENCANDIDATE                0x0010
228 #define NI_CLOSECANDIDATE               0x0011
229 #define NI_SELECTCANDIDATESTR           0x0012
230 #define NI_CHANGECANDIDATELIST          0x0013
231 #define NI_FINALIZECONVERSIONRESULT     0x0014
232 #define NI_COMPOSITIONSTR               0x0015
233 #define NI_SETCANDIDATE_PAGESTART       0x0016
234 #define NI_SETCANDIDATE_PAGESIZE        0x0017
235 #define NI_IMEMENUSELECTED              0x0018
236 
237 /* dwSystemInfoFlags bits */
238 #define IME_SYSINFO_WINLOGON            0x0001
239 #define IME_SYSINFO_WOW16               0x0002
240 
241 BOOL  WINAPI ImmUnlockIMC(HIMC);
242 DWORD WINAPI ImmGetIMCLockCount(HIMC);
243 HIMCC  WINAPI ImmCreateIMCC(DWORD);
244 HIMCC  WINAPI ImmDestroyIMCC(HIMCC);
245 LPVOID WINAPI ImmLockIMCC(HIMCC);
246 BOOL   WINAPI ImmUnlockIMCC(HIMCC);
247 DWORD  WINAPI ImmGetIMCCLockCount(HIMCC);
248 HIMCC  WINAPI ImmReSizeIMCC(HIMCC, DWORD);
249 DWORD  WINAPI ImmGetIMCCSize(HIMCC);
250 
251 BOOL WINAPI ImmGenerateMessage(HIMC);
252 LRESULT WINAPI ImmRequestMessageA(HIMC, WPARAM, LPARAM);
253 LRESULT WINAPI ImmRequestMessageW(HIMC, WPARAM, LPARAM);
254 #define ImmRequestMessage WINELIB_NAME_AW(ImmRequestMessage);
255 BOOL WINAPI ImmTranslateMessage(HWND, UINT, WPARAM, LPARAM);
256 
257 HWND WINAPI
258 ImmCreateSoftKeyboard(
259     _In_ UINT uType,
260     _In_ HWND hwndParent,
261     _In_ INT x,
262     _In_ INT y);
263 
264 BOOL WINAPI
265 ImmShowSoftKeyboard(
266     _In_ HWND hwndSoftKBD,
267     _In_ INT nCmdShow);
268 
269 BOOL WINAPI
270 ImmDestroySoftKeyboard(
271     _In_ HWND hwndSoftKBD);
272 
273 BOOL WINAPI ImeInquire(LPIMEINFO, LPWSTR, LPCWSTR lpszOptions);
274 BOOL WINAPI ImeConfigure (HKL, HWND, DWORD, LPVOID);
275 DWORD WINAPI ImeConversionList(HIMC, LPCWSTR, LPCANDIDATELIST,DWORD,UINT);
276 BOOL WINAPI ImeDestroy(UINT);
277 LRESULT WINAPI ImeEscape(HIMC, UINT, LPVOID);
278 BOOL WINAPI ImeProcessKey(HIMC, UINT, LPARAM, CONST LPBYTE);
279 BOOL WINAPI ImeSelect(HIMC, BOOL);
280 BOOL WINAPI ImeSetActiveContext(HIMC, BOOL);
281 UINT WINAPI ImeToAsciiEx(UINT, UINT, CONST LPBYTE, LPDWORD, UINT, HIMC);
282 BOOL WINAPI NotifyIME(HIMC, DWORD, DWORD, DWORD);
283 BOOL WINAPI ImeRegisterWord(LPCWSTR, DWORD, LPCWSTR);
284 BOOL WINAPI ImeUnregisterWord(LPCWSTR, DWORD, LPCWSTR);
285 UINT WINAPI ImeGetRegisterWordStyle(UINT, LPSTYLEBUFW);
286 UINT WINAPI ImeEnumRegisterWord(REGISTERWORDENUMPROCW, LPCWSTR, DWORD, LPCWSTR, LPVOID);
287 BOOL WINAPI ImeSetCompositionString(HIMC, DWORD, LPCVOID, DWORD, LPCVOID, DWORD);
288 DWORD WINAPI ImeGetImeMenuItems(HIMC, DWORD, DWORD, LPIMEMENUITEMINFOW, LPIMEMENUITEMINFOW, DWORD);
289 
290 /* wParam for WM_IME_CONTROL */
291 #define IMC_GETCANDIDATEPOS             0x0007
292 #define IMC_SETCANDIDATEPOS             0x0008
293 #define IMC_GETCOMPOSITIONFONT          0x0009
294 #define IMC_SETCOMPOSITIONFONT          0x000A
295 #define IMC_GETCOMPOSITIONWINDOW        0x000B
296 #define IMC_SETCOMPOSITIONWINDOW        0x000C
297 #define IMC_GETSTATUSWINDOWPOS          0x000F
298 #define IMC_SETSTATUSWINDOWPOS          0x0010
299 #define IMC_CLOSESTATUSWINDOW           0x0021
300 #define IMC_OPENSTATUSWINDOW            0x0022
301 
302 /*
303  * wParam for WM_IME_CONTROL to the soft keyboard
304  * dwAction for ImmNotifyIME
305  */
306 #define NI_OPENCANDIDATE                0x0010
307 #define NI_CLOSECANDIDATE               0x0011
308 #define NI_SELECTCANDIDATESTR           0x0012
309 #define NI_CHANGECANDIDATELIST          0x0013
310 #define NI_FINALIZECONVERSIONRESULT     0x0014
311 #define NI_COMPOSITIONSTR               0x0015
312 #define NI_SETCANDIDATE_PAGESTART       0x0016
313 #define NI_SETCANDIDATE_PAGESIZE        0x0017
314 #define NI_IMEMENUSELECTED		0x0018
315 
316 /* lParam for WM_IME_SETCONTEXT */
317 #define ISC_SHOWUICANDIDATEWINDOW       0x00000001
318 #define ISC_SHOWUICOMPOSITIONWINDOW     0x80000000
319 #define ISC_SHOWUIGUIDELINE             0x40000000
320 #define ISC_SHOWUIALLCANDIDATEWINDOW    0x0000000F
321 #define ISC_SHOWUIALL                   0xC000000F
322 
323 
324 /* dwIndex for ImmNotifyIME/NI_COMPOSITIONSTR */
325 #define CPS_COMPLETE                    0x0001
326 #define CPS_CONVERT                     0x0002
327 #define CPS_REVERT                      0x0003
328 #define CPS_CANCEL                      0x0004
329 
330 
331 /* the modifiers of hot key */
332 #define MOD_ALT                         0x0001
333 #define MOD_CONTROL                     0x0002
334 #define MOD_SHIFT                       0x0004
335 
336 #define MOD_LEFT                        0x8000
337 #define MOD_RIGHT                       0x4000
338 
339 #define MOD_ON_KEYUP                    0x0800
340 #define MOD_IGNORE_ALL_MODIFIER         0x0400
341 
342 
343 /* Windows for Simplified Chinese Edition hot key ID from 0x10 - 0x2F */
344 #define IME_CHOTKEY_IME_NONIME_TOGGLE           0x10
345 #define IME_CHOTKEY_SHAPE_TOGGLE                0x11
346 #define IME_CHOTKEY_SYMBOL_TOGGLE               0x12
347 
348 /* Windows for Japanese Edition hot key ID from 0x30 - 0x4F */
349 #define IME_JHOTKEY_CLOSE_OPEN                  0x30
350 
351 /* Windows for Korean Edition hot key ID from 0x50 - 0x6F */
352 #define IME_KHOTKEY_SHAPE_TOGGLE                0x50
353 #define IME_KHOTKEY_HANJACONVERT                0x51
354 #define IME_KHOTKEY_ENGLISH                     0x52
355 /* Windows for Tranditional Chinese Edition hot key ID from 0x70 - 0x8F */
356 #define IME_THOTKEY_IME_NONIME_TOGGLE           0x70
357 #define IME_THOTKEY_SHAPE_TOGGLE                0x71
358 #define IME_THOTKEY_SYMBOL_TOGGLE               0x72
359 
360 /* direct switch hot key ID from 0x100 - 0x11F */
361 #define IME_HOTKEY_DSWITCH_FIRST                0x100
362 #define IME_HOTKEY_DSWITCH_LAST                 0x11F
363 
364 /* IME private hot key from 0x200 - 0x21F */
365 #define IME_HOTKEY_PRIVATE_FIRST                0x200
366 #define IME_ITHOTKEY_RESEND_RESULTSTR           0x200
367 #define IME_ITHOTKEY_PREVIOUS_COMPOSITION       0x201
368 #define IME_ITHOTKEY_UISTYLE_TOGGLE             0x202
369 #define IME_ITHOTKEY_RECONVERTSTRING		0x203
370 #define IME_HOTKEY_PRIVATE_LAST                 0x21F
371 
372 
373 /*
374  * dwSystemInfoFlags bits
375  * parameter of ImmGetCompositionString
376  */
377 #define GCS_COMPREADSTR                 0x0001
378 #define GCS_COMPREADATTR                0x0002
379 #define GCS_COMPREADCLAUSE              0x0004
380 #define GCS_COMPSTR                     0x0008
381 #define GCS_COMPATTR                    0x0010
382 #define GCS_COMPCLAUSE                  0x0020
383 #define GCS_CURSORPOS                   0x0080
384 #define GCS_DELTASTART                  0x0100
385 #define GCS_RESULTREADSTR               0x0200
386 #define GCS_RESULTREADCLAUSE            0x0400
387 #define GCS_RESULTSTR                   0x0800
388 #define GCS_RESULTCLAUSE                0x1000
389 
390 /* style bit flags for WM_IME_COMPOSITION */
391 #define CS_INSERTCHAR                   0x2000
392 #define CS_NOMOVECARET                  0x4000
393 
394 
395 /*
396  * bits of fdwInit of INPUTCONTEXT
397  * IME version constants
398  */
399 #define IMEVER_0310                     0x0003000A
400 #define IMEVER_0400                     0x00040000
401 
402 /* IME property bits */
403 #define IME_PROP_AT_CARET               0x00010000
404 #define IME_PROP_SPECIAL_UI             0x00020000
405 #define IME_PROP_CANDLIST_START_FROM_1  0x00040000
406 #define IME_PROP_UNICODE                0x00080000
407 #define IME_PROP_COMPLETE_ON_UNSELECT	0x00100000
408 
409 /* IME UICapability bits */
410 #define UI_CAP_2700                     0x00000001
411 #define UI_CAP_ROT90                    0x00000002
412 #define UI_CAP_ROTANY                   0x00000004
413 #define UI_CAP_SOFTKBD                  0x00010000
414 
415 /* ImmSetCompositionString Capability bits */
416 #define SCS_CAP_COMPSTR                 0x00000001
417 #define SCS_CAP_MAKEREAD                0x00000002
418 #define SCS_CAP_SETRECONVERTSTRING	0x00000004
419 
420 /* IME WM_IME_SELECT inheritance Capability bits */
421 #define SELECT_CAP_CONVERSION           0x00000001
422 #define SELECT_CAP_SENTENCE             0x00000002
423 
424 
425 /* ID for deIndex of ImmGetGuideLine */
426 #define GGL_LEVEL                       0x00000001
427 #define GGL_INDEX                       0x00000002
428 #define GGL_STRING                      0x00000003
429 #define GGL_PRIVATE                     0x00000004
430 
431 /* ID for dwLevel of GUIDELINE Structure */
432 #define GL_LEVEL_NOGUIDELINE            0x00000000
433 #define GL_LEVEL_FATAL                  0x00000001
434 #define GL_LEVEL_ERROR                  0x00000002
435 #define GL_LEVEL_WARNING                0x00000003
436 #define GL_LEVEL_INFORMATION            0x00000004
437 
438 /* ID for dwIndex of GUIDELINE Structure */
439 #define GL_ID_UNKNOWN                   0x00000000
440 #define GL_ID_NOMODULE                  0x00000001
441 #define GL_ID_NODICTIONARY              0x00000010
442 #define GL_ID_CANNOTSAVE                0x00000011
443 #define GL_ID_NOCONVERT                 0x00000020
444 #define GL_ID_TYPINGERROR               0x00000021
445 #define GL_ID_TOOMANYSTROKE             0x00000022
446 #define GL_ID_READINGCONFLICT           0x00000023
447 #define GL_ID_INPUTREADING              0x00000024
448 #define GL_ID_INPUTRADICAL              0x00000025
449 #define GL_ID_INPUTCODE                 0x00000026
450 #define GL_ID_INPUTSYMBOL               0x00000027
451 #define GL_ID_CHOOSECANDIDATE           0x00000028
452 #define GL_ID_REVERSECONVERSION         0x00000029
453 #define GL_ID_PRIVATE_FIRST             0x00008000
454 #define GL_ID_PRIVATE_LAST              0x0000FFFF
455 
456 /* ID for dwIndex of ImmGetProperty */
457 #define IGP_GETIMEVERSION               (DWORD)(-4)
458 #define IGP_PROPERTY                    0x00000004
459 #define IGP_CONVERSION                  0x00000008
460 #define IGP_SENTENCE                    0x0000000c
461 #define IGP_UI                          0x00000010
462 #define IGP_SETCOMPSTR                  0x00000014
463 #define IGP_SELECT                      0x00000018
464 
465 
466 /* dwIndex for ImmSetCompositionString API */
467 #define SCS_SETSTR          (GCS_COMPREADSTR|GCS_COMPSTR)
468 #define SCS_CHANGEATTR      (GCS_COMPREADATTR|GCS_COMPATTR)
469 #define SCS_CHANGECLAUSE    (GCS_COMPREADCLAUSE|GCS_COMPCLAUSE)
470 #define SCS_SETRECONVERTSTRING		0x00010000
471 #define SCS_QUERYRECONVERTSTRING	0x00020000
472 
473 /* attribute for COMPOSITIONSTRING Structure */
474 #define ATTR_INPUT                      0x00
475 #define ATTR_TARGET_CONVERTED           0x01
476 #define ATTR_CONVERTED                  0x02
477 #define ATTR_TARGET_NOTCONVERTED        0x03
478 #define ATTR_INPUT_ERROR                0x04
479 #define ATTR_FIXEDCONVERTED		0x05
480 
481 
482 /* bit field for IMC_SETCOMPOSITIONWINDOW, IMC_SETCANDIDATEWINDOW */
483 #define CFS_DEFAULT                     0x0000
484 #define CFS_RECT                        0x0001
485 #define CFS_POINT                       0x0002
486 #define CFS_FORCE_POSITION              0x0020
487 #define CFS_CANDIDATEPOS                0x0040
488 #define CFS_EXCLUDE                     0x0080
489 
490 /* conversion direction for ImmGetConversionList */
491 #define GCL_CONVERSION                  0x0001
492 #define GCL_REVERSECONVERSION           0x0002
493 #define GCL_REVERSE_LENGTH              0x0003
494 
495 
496 /* bit field for conversion mode */
497 #define IME_CMODE_ALPHANUMERIC          0x0000
498 #define IME_CMODE_NATIVE                0x0001
499 #define IME_CMODE_CHINESE               IME_CMODE_NATIVE
500 /* IME_CMODE_HANGEUL is old name of IME_CMODE_HANGUL. It will be gone eventually. */
501 #define IME_CMODE_HANGEUL               IME_CMODE_NATIVE
502 #define IME_CMODE_HANGUL                IME_CMODE_NATIVE
503 #define IME_CMODE_JAPANESE              IME_CMODE_NATIVE
504 #define IME_CMODE_KATAKANA              0x0002  /* only effect under IME_CMODE_NATIVE */
505 #define IME_CMODE_LANGUAGE              0x0003
506 #define IME_CMODE_FULLSHAPE             0x0008
507 #define IME_CMODE_ROMAN                 0x0010
508 #define IME_CMODE_CHARCODE              0x0020
509 #define IME_CMODE_HANJACONVERT          0x0040
510 #define IME_CMODE_SOFTKBD               0x0080
511 #define IME_CMODE_NOCONVERSION          0x0100
512 #define IME_CMODE_EUDC                  0x0200
513 #define IME_CMODE_SYMBOL                0x0400
514 #define IME_CMODE_FIXED			0x0800
515 
516 
517 #define IME_SMODE_NONE                  0x0000
518 #define IME_SMODE_PLAURALCLAUSE         0x0001
519 #define IME_SMODE_SINGLECONVERT         0x0002
520 #define IME_SMODE_AUTOMATIC             0x0004
521 #define IME_SMODE_PHRASEPREDICT         0x0008
522 #define IME_SMODE_CONVERSATION		0x0010
523 
524 /* style of candidate */
525 #define IME_CAND_UNKNOWN                0x0000
526 #define IME_CAND_READ                   0x0001
527 #define IME_CAND_CODE                   0x0002
528 #define IME_CAND_MEANING                0x0003
529 #define IME_CAND_RADICAL                0x0004
530 #define IME_CAND_STROKE                 0x0005
531 
532 
533 /* wParam of report message WM_IME_NOTIFY */
534 #define IMN_CLOSESTATUSWINDOW           0x0001
535 #define IMN_OPENSTATUSWINDOW            0x0002
536 #define IMN_CHANGECANDIDATE             0x0003
537 #define IMN_CLOSECANDIDATE              0x0004
538 #define IMN_OPENCANDIDATE               0x0005
539 #define IMN_SETCONVERSIONMODE           0x0006
540 #define IMN_SETSENTENCEMODE             0x0007
541 #define IMN_SETOPENSTATUS               0x0008
542 #define IMN_SETCANDIDATEPOS             0x0009
543 #define IMN_SETCOMPOSITIONFONT          0x000A
544 #define IMN_SETCOMPOSITIONWINDOW        0x000B
545 #define IMN_SETSTATUSWINDOWPOS          0x000C
546 #define IMN_GUIDELINE                   0x000D
547 #define IMN_PRIVATE                     0x000E
548 
549 
550 /* wParam of report message WM_IME_REQUEST */
551 #define IMR_COMPOSITIONWINDOW		0x0001
552 #define IMR_CANDIDATEWINDOW		0x0002
553 #define IMR_COMPOSITIONFONT		0x0003
554 #define IMR_RECONVERTSTRING		0x0004
555 #define IMR_CONFIRMRECONVERTSTRING	0x0005
556 #define IMR_QUERYCHARPOSITION		0x0006
557 #define IMR_DOCUMENTFEED		0x0007
558 
559 
560 /* error code of ImmGetCompositionString */
561 #define IMM_ERROR_NODATA                (-1)
562 #define IMM_ERROR_GENERAL               (-2)
563 
564 
565 /* dialog mode of ImmConfigureIME */
566 #define IME_CONFIG_GENERAL              1
567 #define IME_CONFIG_REGISTERWORD         2
568 #define IME_CONFIG_SELECTDICTIONARY     3
569 
570 /* dialog mode of ImmEscape */
571 #define IME_ESC_QUERY_SUPPORT           0x0003
572 #define IME_ESC_RESERVED_FIRST          0x0004
573 #define IME_ESC_RESERVED_LAST           0x07FF
574 #define IME_ESC_PRIVATE_FIRST           0x0800
575 #define IME_ESC_PRIVATE_LAST            0x0FFF
576 #define IME_ESC_SEQUENCE_TO_INTERNAL    0x1001
577 #define IME_ESC_GET_EUDC_DICTIONARY     0x1003
578 #define IME_ESC_SET_EUDC_DICTIONARY     0x1004
579 #define IME_ESC_MAX_KEY                 0x1005
580 #define IME_ESC_IME_NAME                0x1006
581 #define IME_ESC_SYNC_HOTKEY             0x1007
582 #define IME_ESC_HANJA_MODE              0x1008
583 #define IME_ESC_AUTOMATA                0x1009
584 #define IME_ESC_PRIVATE_HOTKEY          0x100a
585 #define IME_ESC_GETHELPFILENAME		0x100b
586 
587 
588 /* style of word registration */
589 #define IME_REGWORD_STYLE_EUDC          0x00000001
590 #define IME_REGWORD_STYLE_USER_FIRST    0x80000000
591 #define IME_REGWORD_STYLE_USER_LAST     0xFFFFFFFF
592 
593 /* dwFlags for ImmAssociateContextEx */
594 #define IACE_CHILDREN           0x0001
595 #define IACE_DEFAULT            0x0010
596 #define IACE_IGNORENOCONTEXT    0x0020
597 
598 /* dwFlags for ImmGetImeMenuItems */
599 #define IGIMIF_RIGHTMENU		0x0001
600 
601 /* dwType for ImmGetImeMenuItems */
602 #define IGIMII_CMODE			0x0001
603 #define IGIMII_SMODE			0x0002
604 #define IGIMII_CONFIGURE		0x0004
605 #define IGIMII_TOOLS			0x0008
606 #define IGIMII_HELP			0x0010
607 #define IGIMII_OTHER			0x0020
608 #define IGIMII_INPUTTOOLS		0x0040
609 
610 /* fType of IMEMENUITEMINFO structure */
611 #define IMFT_RADIOCHECK			0x00001
612 #define IMFT_SEPARATOR			0x00002
613 #define IMFT_SUBMENU			0x00004
614 
615 /* fState of IMEMENUITEMINFO structure */
616 #define IMFS_GRAYED			MFS_GRAYED
617 #define IMFS_DISABLED			MFS_DISABLED
618 #define IMFS_CHECKED			MFS_CHECKED
619 #define IMFS_HILITE			MFS_HILITE
620 #define IMFS_ENABLED			MFS_ENABLED
621 #define IMFS_UNCHECKED			MFS_UNCHECKED
622 #define IMFS_UNHILITE			MFS_UNHILITE
623 #define IMFS_DEFAULT			MFS_DEFAULT
624 
625 
626 /*
627  * type of soft keyboard
628  * for Windows Tranditional Chinese Edition
629  */
630 #define SOFTKEYBOARD_TYPE_T1            0x0001
631 /* for Windows Simplified Chinese Edition */
632 #define SOFTKEYBOARD_TYPE_C1            0x0002
633 
634 
635 HIMC WINAPI ImmAssociateContext(_In_ HWND, _In_ HIMC);
636 BOOL WINAPI ImmAssociateContextEx(_In_ HWND, _In_ HIMC, _In_ DWORD);
637 
638 BOOL WINAPI ImmConfigureIMEA(_In_ HKL, _In_ HWND, _In_ DWORD, _In_ LPVOID);
639 BOOL WINAPI ImmConfigureIMEW(_In_ HKL, _In_ HWND, _In_ DWORD, _In_ LPVOID);
640 #define ImmConfigureIME WINELIB_NAME_AW(ImmConfigureIME)
641 
642 HIMC WINAPI ImmCreateContext(void);
643 BOOL WINAPI ImmSetActiveContext(HWND hwnd, HIMC hIMC, BOOL fFlag);
644 BOOL WINAPI ImmDestroyContext(_In_ HIMC hIMC);
645 BOOL WINAPI ImmDisableIME(_In_ DWORD idThread);
646 BOOL WINAPI ImmEnumInputContext(_In_ DWORD, _In_ IMCENUMPROC, _In_ LPARAM);
647 BOOL WINAPI ImmLoadIME(HKL hKL);
648 BOOL WINAPI CtfImmIsTextFrameServiceDisabled(VOID);
649 
650 UINT
651 WINAPI
652 ImmEnumRegisterWordA(
653   _In_ HKL,
654   _In_ REGISTERWORDENUMPROCA,
655   _In_opt_ LPCSTR lpszReading,
656   _In_ DWORD,
657   _In_opt_ LPCSTR lpszRegister,
658   _In_ LPVOID);
659 
660 UINT
661 WINAPI
662 ImmEnumRegisterWordW(
663   _In_ HKL,
664   _In_ REGISTERWORDENUMPROCW,
665   _In_opt_ LPCWSTR lpszReading,
666   _In_ DWORD,
667   _In_opt_ LPCWSTR lpszRegister,
668   _In_ LPVOID);
669 
670 #define ImmEnumRegisterWord WINELIB_NAME_AW(ImmEnumRegisterWord)
671 
672 LRESULT WINAPI ImmEscapeA(_In_ HKL, _In_ HIMC, _In_ UINT, _In_ LPVOID);
673 LRESULT WINAPI ImmEscapeW(_In_ HKL, _In_ HIMC, _In_ UINT, _In_ LPVOID);
674 #define ImmEscape WINELIB_NAME_AW(ImmEscape)
675 
676 DWORD
677 WINAPI
678 ImmGetCandidateListA(
679   _In_ HIMC,
680   _In_ DWORD deIndex,
681   _Out_writes_bytes_opt_(dwBufLen) LPCANDIDATELIST lpCandList,
682   _In_ DWORD dwBufLen);
683 
684 DWORD
685 WINAPI
686 ImmGetCandidateListW(
687   _In_ HIMC,
688   _In_ DWORD deIndex,
689   _Out_writes_bytes_opt_(dwBufLen) LPCANDIDATELIST lpCandList,
690   _In_ DWORD dwBufLen);
691 
692 #define ImmGetCandidateList WINELIB_NAME_AW(ImmGetCandidateList)
693 
694 DWORD WINAPI ImmGetCandidateListCountA(_In_ HIMC, _Out_ LPDWORD);
695 DWORD WINAPI ImmGetCandidateListCountW(_In_ HIMC, _Out_ LPDWORD);
696 #define ImmGetCandidateListCount WINELIB_NAME_AW(ImmGetCandidateListCount)
697 
698 BOOL
699 WINAPI
700 ImmGetCandidateWindow(
701   _In_ HIMC,
702   _In_ DWORD,
703   _Out_ LPCANDIDATEFORM lpCandidate);
704 
705 #if defined(_WINGDI_) && !defined(NOGDI)
706 
707 BOOL WINAPI ImmGetCompositionFontA(_In_ HIMC, _Out_ LPLOGFONTA);
708 BOOL WINAPI ImmGetCompositionFontW(_In_ HIMC, _Out_ LPLOGFONTW);
709 #define ImmGetCompositionFont WINELIB_NAME_AW(ImmGetCompositionFont)
710 
711 BOOL WINAPI ImmSetCompositionFontA(_In_ HIMC, _In_ LPLOGFONTA);
712 BOOL WINAPI ImmSetCompositionFontW(_In_ HIMC, _In_ LPLOGFONTW);
713 #define ImmSetCompositionFont WINELIB_NAME_AW(ImmSetCompositionFont)
714 
715 #endif
716 
717 LONG
718 WINAPI
719 ImmGetCompositionStringA(
720   _In_ HIMC,
721   _In_ DWORD,
722   _Out_writes_bytes_opt_(dwBufLen) LPVOID lpBuf,
723   _In_ DWORD dwBufLen);
724 
725 LONG
726 WINAPI
727 ImmGetCompositionStringW(
728   _In_ HIMC,
729   _In_ DWORD,
730   _Out_writes_bytes_opt_(dwBufLen) LPVOID lpBuf,
731   _In_ DWORD dwBufLen);
732 
733 #define ImmGetCompositionString WINELIB_NAME_AW(ImmGetCompositionString)
734 
735 BOOL WINAPI ImmGetCompositionWindow(_In_ HIMC, _Out_ LPCOMPOSITIONFORM);
736 HIMC WINAPI ImmGetContext(_In_ HWND);
737 
738 DWORD
739 WINAPI
740 ImmGetConversionListA(
741   _In_ HKL,
742   _In_ HIMC,
743   _In_ LPCSTR lpSrc,
744   _Out_writes_bytes_(dwBufLen) LPCANDIDATELIST lpDst,
745   _In_ DWORD dwBufLen,
746   _In_ UINT uFlag);
747 
748 DWORD
749 WINAPI
750 ImmGetConversionListW(
751   _In_ HKL,
752   _In_ HIMC,
753   _In_ LPCWSTR lpSrc,
754   _Out_writes_bytes_(dwBufLen) LPCANDIDATELIST lpDst,
755   _In_ DWORD dwBufLen,
756   _In_ UINT uFlag);
757 
758 #define ImmGetConversionList WINELIB_NAME_AW(ImmGetConversionList)
759 
760 BOOL
761 WINAPI
762 ImmGetConversionStatus(
763   _In_ HIMC,
764   _Out_opt_ LPDWORD lpfdwConversion,
765   _Out_opt_ LPDWORD lpfdwSentence);
766 
767 HWND WINAPI ImmGetDefaultIMEWnd(_In_ HWND);
768 
769 UINT
770 WINAPI
771 ImmGetDescriptionA(
772   _In_ HKL,
773   _Out_writes_opt_(uBufLen) LPSTR lpszDescription,
774   _In_ UINT uBufLen);
775 
776 UINT
777 WINAPI
778 ImmGetDescriptionW(
779   _In_ HKL,
780   _Out_writes_opt_(uBufLen) LPWSTR lpszDescription,
781   _In_ UINT uBufLen);
782 
783 #define ImmGetDescription WINELIB_NAME_AW(ImmGetDescription)
784 
785 DWORD
786 WINAPI
787 ImmGetGuideLineA(
788   _In_ HIMC,
789   _In_ DWORD dwIndex,
790   _Out_writes_bytes_opt_(dwBufLen) LPSTR lpBuf,
791   _In_ DWORD dwBufLen);
792 
793 DWORD
794 WINAPI
795 ImmGetGuideLineW(
796   _In_ HIMC,
797   _In_ DWORD dwIndex,
798   _Out_writes_bytes_opt_(dwBufLen) LPWSTR lpBuf,
799   _In_ DWORD dwBufLen);
800 
801 #define ImmGetGuideLine WINELIB_NAME_AW(ImmGetGuideLine)
802 
803 UINT
804 WINAPI
805 ImmGetIMEFileNameA(
806   _In_ HKL,
807   _Out_writes_opt_(uBufLen) LPSTR lpszFileName,
808   _In_ UINT uBufLen);
809 
810 UINT
811 WINAPI
812 ImmGetIMEFileNameW(
813   _In_ HKL,
814   _Out_writes_opt_(uBufLen) LPWSTR lpszFileName,
815   _In_ UINT uBufLen);
816 
817 #define ImmGetIMEFileName WINELIB_NAME_AW(ImmGetIMEFileName)
818 
819 DWORD
820 WINAPI
821 ImmGetImeMenuItemsA(
822   _In_ HIMC,
823   _In_ DWORD,
824   _In_ DWORD,
825   _Out_opt_ LPIMEMENUITEMINFOA lpImeParentMenu,
826   _Out_writes_bytes_opt_(dwSize) LPIMEMENUITEMINFOA lpImeMenu,
827   _In_ DWORD dwSize);
828 
829 DWORD
830 WINAPI
831 ImmGetImeMenuItemsW(
832   _In_ HIMC,
833   _In_ DWORD,
834   _In_ DWORD,
835   _Out_opt_ LPIMEMENUITEMINFOW lpImeParentMenu,
836   _Out_writes_bytes_opt_(dwSize) LPIMEMENUITEMINFOW lpImeMenu,
837   _In_ DWORD dwSize);
838 
839 #define ImmGetImeMenuItems WINELIB_NAME_AW(ImmGetImeMenuItems)
840 
841 BOOL WINAPI ImmGetOpenStatus(_In_ HIMC);
842 DWORD WINAPI ImmGetProperty(_In_ HKL, _In_ DWORD);
843 
844 UINT
845 WINAPI
846 ImmGetRegisterWordStyleA(
847   _In_ HKL,
848   _In_ UINT nItem,
849   _Out_writes_(nItem) LPSTYLEBUFA lpStyleBuf);
850 
851 UINT
852 WINAPI
853 ImmGetRegisterWordStyleW(
854   _In_ HKL,
855   _In_ UINT nItem,
856   _Out_writes_(nItem) LPSTYLEBUFW lpStyleBuf);
857 
858 #define ImmGetRegisterWordStyle WINELIB_NAME_AW(ImmGetRegisterWordStyle)
859 
860 BOOL WINAPI ImmGetStatusWindowPos(_In_ HIMC, _Out_ LPPOINT);
861 UINT WINAPI ImmGetVirtualKey(_In_ HWND);
862 
863 HKL WINAPI ImmInstallIMEA(_In_ LPCSTR, _In_ LPCSTR);
864 HKL WINAPI ImmInstallIMEW(_In_ LPCWSTR, _In_ LPCWSTR);
865 #define ImmInstallIME WINELIB_NAME_AW(ImmInstallIME)
866 
867 BOOL WINAPI ImmIsIME(_In_ HKL);
868 
869 BOOL WINAPI ImmIsUIMessageA(_In_ HWND, _In_ UINT, _In_ WPARAM, _In_ LPARAM);
870 BOOL WINAPI ImmIsUIMessageW(_In_ HWND, _In_ UINT, _In_ WPARAM, _In_ LPARAM);
871 #define ImmIsUIMessage WINELIB_NAME_AW(ImmIsUIMessage)
872 
873 BOOL WINAPI ImmNotifyIME(_In_ HIMC, _In_ DWORD, _In_ DWORD, _In_ DWORD);
874 
875 DWORD WINAPI ImmProcessKey(HWND, HKL, UINT, LPARAM, DWORD);
876 
877 BOOL
878 WINAPI
879 ImmRegisterWordA(
880   _In_ HKL,
881   _In_ LPCSTR lpszReading,
882   _In_ DWORD,
883   _In_ LPCSTR lpszRegister);
884 
885 BOOL
886 WINAPI
887 ImmRegisterWordW(
888   _In_ HKL,
889   _In_ LPCWSTR lpszReading,
890   _In_ DWORD,
891   _In_ LPCWSTR lpszRegister);
892 
893 #define ImmRegisterWord WINELIB_NAME_AW(ImmRegisterWord)
894 
895 BOOL WINAPI ImmReleaseContext(_In_ HWND, _In_ HIMC);
896 BOOL WINAPI ImmSetCandidateWindow(_In_ HIMC, _In_ LPCANDIDATEFORM);
897 
898 BOOL
899 WINAPI
900 ImmSetCompositionStringA(
901   _In_ HIMC,
902   _In_ DWORD dwIndex,
903   _Inout_updates_bytes_opt_(dwCompLen) LPVOID lpComp,
904   _In_ DWORD dwCompLen,
905   _Inout_updates_bytes_opt_(dwReadLen) LPVOID lpRead,
906   _In_ DWORD dwReadLen);
907 
908 BOOL
909 WINAPI
910 ImmSetCompositionStringW(
911   _In_ HIMC,
912   _In_ DWORD dwIndex,
913   _Inout_updates_bytes_opt_(dwCompLen) LPVOID lpComp,
914   _In_ DWORD dwCompLen,
915   _Inout_updates_bytes_opt_(dwReadLen) LPVOID lpRead,
916   _In_ DWORD dwReadLen);
917 
918 #define ImmSetCompositionString WINELIB_NAME_AW(ImmSetCompositionString)
919 
920 BOOL WINAPI ImmSetCompositionWindow(_In_ HIMC, _In_ LPCOMPOSITIONFORM);
921 BOOL WINAPI ImmSetConversionStatus(_In_ HIMC, _In_ DWORD, _In_ DWORD);
922 BOOL WINAPI ImmSetOpenStatus(_In_ HIMC, _In_ BOOL);
923 BOOL WINAPI ImmSetStatusWindowPos(_In_ HIMC, _In_ LPPOINT);
924 BOOL WINAPI ImmSimulateHotKey(_In_ HWND, _In_ DWORD);
925 
926 BOOL
927 WINAPI
928 ImmUnregisterWordA(
929   _In_ HKL,
930   _In_ LPCSTR lpszReading,
931   _In_ DWORD,
932   _In_ LPCSTR lpszUnregister);
933 
934 BOOL
935 WINAPI
936 ImmUnregisterWordW(
937   _In_ HKL,
938   _In_ LPCWSTR lpszReading,
939   _In_ DWORD,
940   _In_ LPCWSTR lpszUnregister);
941 
942 #define ImmUnregisterWord WINELIB_NAME_AW(ImmUnregisterWord)
943 
944 
945 #ifdef __cplusplus
946 }
947 #endif
948 
949 #endif  /* __WINE_IMM_H */
950