windows-nt/Source/XPSP1/NT/multimedia/media/avi/inc.16/ime31.h
2020-09-26 16:20:57 +08:00

416 lines
13 KiB
C

/**********************************************************************/
/* IME31.H - 3.1 Input Method related definitions */
/* */
/* Copyright (c) 1993-1994 Microsoft Corporation */
/**********************************************************************/
#ifndef _INC_IME31
#define _INC_IME31 // defined if IME31.H has been included
typedef struct _tagDATETIME {
WORD year;
WORD month;
WORD day;
WORD hour;
WORD min;
WORD sec;
} DATETIME;
// compatible IMEPro - this is the same as 3.1 in 3 countries
typedef struct _tagCIMEPRO {
HWND hWnd;
DATETIME InstDate;
UINT wVersion;
BYTE szDescription[50];
BYTE szName[80];
BYTE szOptions[30];
#ifdef TAIWAN
BYTE szUsrFontName[80];
BOOL fEnable;
#endif
} CIMEPRO;
typedef CIMEPRO *PCIMEPRO;
typedef CIMEPRO NEAR *NPCIMEPRO;
typedef CIMEPRO FAR *LPCIMEPRO;
// new IMEPro - this is the same in 3 countries
typedef struct _tagNIMEPRO {
HWND hWnd;
DATETIME InstDate;
UINT wVersion;
BYTE szDescription[50];
BYTE szName[80];
BYTE szOptions[30];
} NIMEPRO;
typedef NIMEPRO *PNIMEPRO;
typedef NIMEPRO NEAR *NPNIMEPRO;
typedef NIMEPRO FAR *LPNIMEPRO;
// wParam for WINNLSSendString
#define WSST_STRING 0
#define WSST_STRINGEX 1
#ifdef _INC_IMMSTRUC
BOOL WINAPI WINNLSInquire(LPIMELINK, LPTHREADLINK, LPPTHREADLINK);
#endif
BOOL WINAPI IMPGetIME(HWND, LPCIMEPRO);
BOOL WINAPI IMPQueryIME(LPCIMEPRO);
BOOL WINAPI IMPAddIME(LPNIMEPRO);
BOOL WINAPI IMPDeleteIME(LPNIMEPRO);
BOOL WINAPI IMPSetIME(HWND, LPNIMEPRO);
BOOL WINAPI IMPModifyIME(LPSTR, LPCIMEPRO);
WORD WINAPI IMPGetDefaultIME(LPNIMEPRO);
WORD WINAPI IMPSetDefaultIME(LPNIMEPRO);
BOOL WINAPI WINNLSSetIMEHandle(LPSTR, HWND);
BOOL WINAPI WINNLSSetIMEStatus(HWND, BOOL);
BOOL WINAPI WINNLSEnableIME(HWND, BOOL);
UINT WINAPI WINNLSGetKeyState(void);
BOOL WINAPI WINNLSSetKeyState(UINT);
BOOL WINAPI WINNLSGetEnableStatus(HWND);
BOOL WINAPI WINNLSSetKeyboardHook(BOOL);
BOOL WINAPI WINNLSSendControl(WORD, WORD);
BOOL WINAPI WINNLSSendString(HWND, WORD, LPVOID);
BOOL WINAPI WINNLSPostAppMessage(HWND, UINT, WPARAM, LPARAM);
LRESULT WINAPI WINNLSSendAppMessage(HWND, UINT, WPARAM, LPARAM);
#if defined(JAPAN)
BOOL WINAPI WINNLSSetIMEHotkey(HWND, UINT);
UINT WINAPI WINNLSGetIMEHotkey(HWND);
#endif
// 4.0 APIs
int WINAPI WINNLSTranslateMessage(int, LPDWORD, HIMC);
UINT WINAPI WINNLSGet31ModeFrom40CMode(DWORD);
DWORD WINAPI WINNLSGet40CModeFrom31Mode(UINT);
#ifdef _INC_IMMSTRUC
BOOL WINAPI IMPInstallIME(LPIMELINK);
BOOL WINAPI IMPUpdateIMESettings(LPIMELINK, int);
BOOL WINAPI IMPDeleteIMESettings(LPIMELINK, int);
#endif
#if defined(CHINA) || defined(JAPAN) || defined(TAIWAN)
// dispatch IME support functions
BOOL WINAPI WINNLSSetDispatchDDIs(HINSTANCE);
BOOL WINAPI WINNLSClearDispatchDDIs(HINSTANCE);
BOOL WINAPI IMPDispatchGetIME(HINSTANCE, LPCIMEPRO);
#endif
#if defined(CHINA) || defined(TAIWAN)
// Chinese Windows WINNLS functions
BOOL WINAPI IMPSetFirstIME(HWND, LPNIMEPRO);
BOOL WINAPI IMPGetFirstIME(HWND, LPCIMEPRO);
BOOL WINAPI WINNLSDefIMEProc(HWND, HDC, WPARAM, WPARAM, LPARAM, LPARAM);
LRESULT WINAPI ControlIMEMessage(HWND, LPCIMEPRO, WPARAM, WPARAM, LPARAM);
BOOL WINAPI IMPRetrieveIME(LPCIMEPRO, WPARAM);
// Chinese Windows 3.0 WINNLS APIs, these APIs just return fail in 4.0
BOOL WINAPI IMPEnableIME(HWND, LPCIMEPRO, BOOL);
BOOL WINAPI IMPSetUsrFont(HWND, LPCIMEPRO);
BOOL WINAPI WINNLSQueryIMEInfo(HWND, HWND, LPVOID);
BOOL WINAPI InquireIME(void);
#endif
typedef struct tagIMESTRUCT {
UINT fnc; // function code
WPARAM wParam; // word parameter
UINT wCount; // word counter
UINT dchSource; // offset to Source from top of memory object
UINT dchDest; // offset to Desrination from top of memory object
LPARAM lParam1;
LPARAM lParam2;
LPARAM lParam3;
} IMESTRUCT;
typedef IMESTRUCT *PIMESTRUCT;
typedef IMESTRUCT NEAR *NPIMESTRUCT;
typedef IMESTRUCT FAR *LPIMESTRUCT;
typedef struct tagOLDUNDETERMINESTRUCT {
UINT uSize;
UINT uDefIMESize;
UINT uLength;
UINT uDeltaStart;
UINT uCursorPos;
BYTE cbColor[16];
// -- below members will have variable length. --
// BYTE cbAttrib[];
// BYTE cbText[];
// BYTE cbIMEDef[];
} OLDUNDETERMINESTRUCT;
typedef OLDUNDETERMINESTRUCT *POLDUNDETERMINESTRUCT;
typedef OLDUNDETERMINESTRUCT NEAR *NPOLDUNDETERMINESTRUCT;
typedef OLDUNDETERMINESTRUCT FAR *LPOLDUNDETERMINESTRUCT;
typedef struct tagUNDETERMINESTRUCT {
DWORD dwSize;
UINT uDefIMESize;
UINT uDefIMEPos;
UINT uUndetTextLen;
UINT uUndetTextPos;
UINT uUndetAttrPos;
UINT uCursorPos;
UINT uDeltaStart;
UINT uDetermineTextLen;
UINT uDetermineTextPos;
UINT uDetermineDelimPos;
UINT uYomiTextLen;
UINT uYomiTextPos;
UINT uYomiDelimPos;
} UNDETERMINESTRUCT;
typedef UNDETERMINESTRUCT *PUNDETERMINESTRUCT;
typedef UNDETERMINESTRUCT NEAR *NPUNDETERMINESTRUCT;
typedef UNDETERMINESTRUCT FAR *LPUNDETERMINESTRUCT;
typedef struct tagSTRINGEXSTRUCT {
DWORD dwSize;
UINT uDeterminePos;
UINT uDetermineDelimPos;
UINT uYomiPos;
UINT uYomiDelimPos;
} STRINGEXSTRUCT;
typedef STRINGEXSTRUCT *PSTRINGEXSTRUCT;
typedef STRINGEXSTRUCT NEAR *NPSTRINGEXSTRUCT;
typedef STRINGEXSTRUCT FAR *LPSTRINGEXSTRUCT;
#ifdef KOREA
#define CP_HWND 0
#define CP_OPEN 1
#define CP_DIRECT 2
#define CP_LEVEL 3
#define lpSource(lpks) (LPSTR)((LPSTR)lpks+lpks->dchSource)
#define lpDest(lpks) (LPSTR)((LPSTR)lpks+lpks->dchDest)
#endif // KOREA
#ifdef JAPAN
// virtual key of Japan
#define VK_DBE_ALPHANUMERIC 0x0f0
#define VK_DBE_KATAKANA 0x0f1
#define VK_DBE_HIRAGANA 0x0f2
#define VK_DBE_SBCSCHAR 0x0f3
#define VK_DBE_DBCSCHAR 0x0f4
#define VK_DBE_ROMAN 0x0f5
#define VK_DBE_NOROMAN 0x0f6
#define VK_DBE_ENTERIMECONFIGMODE 0x0f8
#define VK_DBE_FLUSHSTRING 0x0f9
#define VK_DBE_CODEINPUT 0x0fa
#define VK_DBE_NOCODEINPUT 0x0fb
#define VK_DBE_DETERMINESTRING 0x0fc
#define VK_DBE_ENTERDLGCONVERSIONMODE 0x0fd
#endif // JAPAN
#ifdef KOREA
// virtual key of Korea
#define VK_FINAL 0x18
#define VK_CONVERT 0x1C
#define VK_NONCONVERT 0x1D
#define VK_ACCEPT 0x1E
#define VK_MODECHANGE 0x1F
#endif
// IME subfunctions
#define IME_GETIMECAPS 0x03
#define IME_SETOPEN 0x04
#define IME_GETOPEN 0x05
#define IME_ENABLEDOSIME 0x06
#define IME_GETVERSION 0x07
#define IME_SETCONVERSIONWINDOW 0x08
#define IME_SETCONVERSIONMODE 0x10
#define IME_GETCONVERSIONMODE 0x11
#define IME_SETCONVERSIONFONT 0x12
#define IME_SENDVKEY 0x13
#define IME_DESTROYIME 0x14
#define IME_PRIVATE 0x15
#define IME_WINDOWUPDATE 0x16
#define IME_SELECT 0x17
#define IME_ENTERWORDREGISTERMODE 0x18
#define IME_SETCONVERSIONFONTEX 0x19
#define IME_DBCSNAME 0x1A
#define IME_MAXKEY 0x1B
#define IME_CODECONVERT 0x20
#define IME_SETUSRFONT 0x20
#define IME_CONVERTLIST 0x21
#define IME_QUERYUSRFONT 0x21
#define IME_INPUTKEYTOSEQUENCE 0x22
#define IME_SEQUENCETOINTERNAL 0x23
#define IME_QUERYIMEINFO 0x24
#define IME_DIALOG 0x25
#define IME_AUTOMATA 0x30
#define IME_HANJAMODE 0x31
#define IME_GETLEVEL 0x40
#define IME_SETLEVEL 0x41
#define IME_GETMNTABLE 0x42
#define IME_SETUNDETERMINESTRING 0x50
#define IME_SETCAPTURE 0x51
#define IME_PRIVATEFIRST 0x0100
#define IME_PRIVATELAST 0x04FF
// 3.0 IME subfunctions
#define IME_QUERY IME_GETIMECAPS
#define IME_ENABLE IME_ENABLEDOSIME
#define IME_GET_MODE IME_GETCONVERSIONMODE
#define IME_SETFONT IME_SETCONVERSIONFONT
#define IME_SENDKEY IME_SENDVKEY
#define IME_DESTROY IME_DESTROYIME
#define IME_WORDREGISTER IME_ENTERWORDREGISTERMODE
#ifdef KOREA
#define IME_MOVEIMEWINDOW IME_SETCONVERSIONWINDOW
#define IME_SET_MODE 0x12
#else
#define IME_MOVECONVERTWINDOW IME_SETCONVERSIONWINDOW
#define IME_SET_MODE IME_SETCONVERSIONMODE
#endif
#if defined(JAPAN) || defined(KOREA)
#define MCW_DEFAULT 0x00
#define MCW_RECT 0x01
#define MCW_WINDOW 0x02
#define MCW_SCREEN 0x04
#define MCW_VERTICAL 0x08
#define MCW_HIDDEN 0x10
#define MCW_CMD 0x16
#endif
#ifdef KOREA
// IME_CODECONVERT subfunctions
#define IME_BANJAtoJUNJA 0x13
#define IME_JUNJAtoBANJA 0x14
#define IME_JOHABtoKS 0x15
#define IME_KStoJOHAB 0x16
// IME_AUTOMATA subfunctions
#define IMEA_INIT 0x01
#define IMEA_NEXT 0x02
#define IMEA_PREV 0x03
// IME_HANJAMODE subfunctions
#define IME_REQUEST_CONVERT 0x01
#define IME_ENABLE_CONVERT 0x02
// IME_MOVEIMEWINDOW subfunctions
#define INTERIM_WINDOW 0x00
#define MODE_WINDOW 0x01
#define HANJA_WINDOW 0x02
#endif // KOREA
#if defined(CHINA) || defined(TAIWAN)
#define SK_KEY_MAX 46
#define IMEPROC_SWITCH 0x0001
// the IMEPROC_SK is from 0x0010 ~ 0x001F
#define IMEPROC_SK 0x0010
#define IMEPROC_SK0 0x0010
#define IMEPROC_SK1 0x0011
#define IMEPROC_SK2 0x0012
#define PROC_INFO 0x0001
#define PROC_SHOW 0x0002
#define PROC_HIDE 0x0004
#define BY_IME_HWND 0x0000
#define BY_IME_NAME 0x0001
#define BY_IME_DESCRIPTION 0x0002
#define BY_IME_DEFAULT 0x000F
// Those bits are used by ControlIMEMessage()
// 0x0030 - the two bits are for post/send messages control
// CTRL_NONE - don't send and post
#define CTRL_MSG_MASK 0x0030
#define CTRL_SEND 0x0000
#define CTRL_POST 0x0010
#define CTRL_NONE 0x0030
#define CTRL_USER_ALLOC 0x0040
// CTRL_MODIFY_??? - modify imepro of specified IME
// CTRL_MODIFY is all modify bits, but now only one bit
#define CTRL_MODIFY_USR_DIC 0x0080
#define CTRL_MODIFY CTRL_MODIFY_USR_DIC
#endif // CHINA || TAIWAN
// conversion mode
#define IME_MODE_ALPHANUMERIC 0x0001
#define IME_MODE_KATAKANA 0x0002
#define IME_MODE_HIRAGANA 0x0004
#define IME_MODE_HANJACONVERT 0x0004
#define IME_MODE_DBCSCHAR 0x0010
#define IME_MODE_ROMAN 0x0020
#define IME_MODE_NOROMAN 0x0040
#define IME_MODE_CODEINPUT 0x0080
#define IME_MODE_NOCODEINPUT 0x0100
#define IME_MODE_LHS 0x0200
#define IME_MODE_NOLHS 0x0400
#define IME_MODE_SK 0x0800
#define IME_MODE_NOSK 0x1000
#define IME_MODE_XSPACE 0x2000
#define IME_MODE_NOXSPACE 0x4000
#ifdef KOREA
#define IME_MODE_SBCSCHAR 0x0002
#else
#define IME_MODE_SBCSCHAR 0x0008
#endif
// error code
#define IME_RS_ERROR 0x01 // general error
#define IME_RS_NOIME 0x02 // IME is not installed
#define IME_RS_TOOLONG 0x05 // given string is too long
#define IME_RS_ILLEGAL 0x06 // illegal charactor(s) is string
#define IME_RS_NOTFOUND 0x07 // no (more) candidate
#define IME_RS_NOROOM 0x0a // no disk/memory space
#define IME_RS_DISKERROR 0x0e // disk I/O error
#define IME_RS_CAPTURED 0x10 // IME is captured (PENWIN)
#define IME_RS_INVALID 0x11 // invalid sub-function was specified
#define IME_RS_NEST 0x12 // called nested
#define IME_RS_SYSTEMMODAL 0x13 // called when system mode
#define WM_IME_REPORT 0x0280
#define WM_IMEKEYDOWN 0x0290
#define WM_IMEKEYUP 0x0291
// wParam of report message WM_IME_REPORT
#define IR_STRINGSTART 0x0100
#define IR_STRINGEND 0x0101
#define IR_OPENCONVERT 0x0120
#define IR_CHANGECONVERT 0x0121
#define IR_CLOSECONVERT 0x0122
#define IR_FULLCONVERT 0x0123
#define IR_IMESELECT 0x0130
#define IR_STRING 0x0140
#define IR_DBCSCHAR 0x0160
#define IR_UNDETERMINE 0x0170
#define IR_STRINGEX 0x0180
// return value for IME_VERSION
#define IMEVER_31 0x0a03
WORD WINAPI SendIMEMessage(HWND, LPARAM);
LRESULT WINAPI SendIMEMessageEx(HWND, LPARAM);
#if defined(CHINA) || defined(TAIWAN)
LRESULT WINAPI ControlIMEMessage(HWND, LPCIMEPRO, WPARAM, WPARAM, LPARAM);
#endif
#endif // _INC_IME31