Part
There are six pre-defined Parts and one private part to store the instance
specific data. Each part data area is allocated by calling ImCreateIMIPart
and destroyed by calling ImDestroyIMIPart. Data itself
is accessible through ImRequestIMIPart and ImReleaseIMIPart
calls (The exception is the Status part). Creating each part is
IME's responsibility.
Status Part
This part is used to keep the current input related status information. Status part data may contain any string for displaying IME status.
STATUSSTRINGHEADER { ULONG ulSize; ULONG ulStringLen; ULONG ulStringOffset; ULONG ulStringAttrOffset; ULONG ulCursorPos; ULONG ulCursorAttr; } where ulSize : Size of this structure. ulStringLen : String and attribute buffer length in bytes. ulStringOffset : Offset of the string buffer. ulStringAttrOffset : Offset of the string attribute buffer ulCursorPos : Cursor position in bytes ulCursorAttr : Cursor attribute
Attributes in ulStringAttrOffset have the same definition with ImGetStatusString
API.
Conversion Part
This part is used to hold the conversion intermediate data. Basically this part contains two information and those attributes, i.e., the current intermediate converted string and its reading information.
CONVERSIONSTRINGHEADER { ULONG ulSize; ULONG ulReadingAttrLen; ULONG ulReadingAttrOffset; ULONG ulReadingClauseLen; ULONG ulReadingClauseOffset; ULONG ulReadingStringLen; ULONG ulReadingStringOffset; ULONG ulConversionAttrLen; ULONG ulConversionAttrOffset; ULONG ulConversionClauseLen; ULONG ulConversionClauseOffset; ULONG ulConversionStringLen; ULONG ulConversionStringOffset; ULONG ulCursorPos; ULONG ulCursorAttr; ULONG ulChangeStart } where ulSize : Size of this structure. ulReadingAttrLen : Reading attribute buffer length. ulReadingAttrOffset : Offset of the reading attribute buffer. ulReadingClauseLen : Reading Clause buffer length. ulReadingClauseOffset : Offset of the Reading Clause buffer ulReadingStringLen : Reading string buffer length ulReadingStringOffset : Offset of the Reading String buffer ulConversionAttrLen : Conversion attribute buffer length. ulConversionAttrOffset : Offset of Conversion attribute buffer. ulConversionClauseLen : Conversion clause buffer length. ulConversionClauseOffset : Offset of Conversion clause buffer ulConversionStringLen : Conversion string buffer length ulConversionStringOffset : Offset of Conversion string buffer ulCursorPos : Cursor position in bytes ulCursorAttr : Cursor attribute ulChangeStart : Starting position of the changes in bytes
Attributes and Clause in Reading and Conversion fields have the same definition
with ImGet/SetConversionString API.
Result Part
This part is filled with the data which is already converted and ready to be delivered to the application.
RESULTSTRINGHEADER { ULONG ulSize; ULONG ulReadingAttrLen; ULONG ulReadingAttrOffset; ULONG ulReadingClauseLen; ULONG ulReadingClauseOffset; ULONG ulReadingStringLen; ULONG ulReadingStringOffset; ULONG ulResultAttrLen; ULONG ulResultAttrOffset; ULONG ulResultClauseLen; ULONG ulResultClauseOffset; ULONG ulResultStringLen; ULONG ulResultStringOffset; } where ulSize : Size of this structure ulReadingAttrLen : Reading attribute length ulReadingAttrOffset : Offset of Reading attribute ulReadingClauseLen : Reading clause length ulReadingClauseOffset : Offset of Reading clause ulReadingStringLen : Reading string length ulReadingStringOffset : Offset of Reading string ulResultAttrLen : Result attribute length ulResultAttrOffset : Offset of Result attribute ulResultClauseLen : Result clause length ulResultClauseOffset : Offset of Result clause ulResultStringLen : Result string length ulResultStringOffset : Offset of Result string
Attributes and Clause in Reading and Result fields have the same definition
with ImQuery/SetResultString API.
Candidate Part
This part has the list of the conversion candidates.
CANDIDATEINFOHEADER { ULONG ulSize; ULONG ulCount; ULONG ulListOffset[32]; ULONG ulPrivateSize; ULONG ulPrivateOffset; } where ulSize : Size of this structure ulCount : Count of candidate lists ulListOffset : Offsets of each candidate lists. ulPrivateSize : Size of Private data area ulPrivateOffset : Offset of Private data area
Each ulListOffset points to the candidate list structure which is described
in IM Interface section.
InfoMsg Part
This part has the informational message which should be popped up.
INFOMSGHEADER { ULONG ulSize; ULONG ulErrorLevel; ULONG ulTypeID; ULONG ulTitleLen; ULONG ulTitleOffset; ULONG ulStringLen; ULONG ulStringOffset; ULONG ulPrivateLen; ULONG ulPrivateOffset; } where ulSize : Size of this structure ulErrorLevel : Error level ulTypeID : Error type index ulTitleLen : Error title length ulTitleOffset : Offset of error title ulStringLen : Error message length ulStringOffset : Offset of Error message ulPrivateLen : Private data area length ulPrivateOffset : Offset of Private data area
Value definitions of ulErrorLevel and ulTypeID are described in ImQueryInfoMsg
API.
Register Word Part
This part has the initial information to dispaly the register word panel.
REGISTERWORDHEADER { ULONG ulSize; ULONG ulReadingLen; ULONG ulReadingOffset; ULONG ulWordLen; ULONG ulWordOffset; } where ulSize : Size of this structure ulReadingLen : register word reading length ulReadingOffset : Offset of the register word reading ulWordlen : register word string length ulWordOffset : Offset of the register word string
This part contains the IME specific data.