关闭

ime文件中必须使用的结构

1650人阅读 评论(0) 收藏 举报

前二章我们讲述了ime和imm函数,二者之间是靠下列结构通讯的。

1、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   当关闭输入法时,完成编码的转换

                                   //     用于 W982000

              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;

2、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;

//用于存放编码信息的信息:所有的实际信息放在本结构的后面                                

 

3、CANDIDATEINFO       用于编码选择管理

typedef struct tagCANDIDATEINFO {        //编码选择信息的信息,其后为实际编码列表数据

    DWORD dwSize;                         //数据所占内存大小

    DWORD dwCount;                        //表马列表个数

    DWORD dwOffset[32];                   //各个编码列表的内存位置

    DWORD dwPrivateSize;                  //自定义数据尺寸

    DWORD dwPrivateOffset;                //缓冲区位置

} CANDIDATEINFO;

4、GUIDELINE

typedef struct tagGUIDELINE {

5CANDIDATELIST

The CANDIDATELIST structure contains information about a candidate list.

typedef struct tagCANDIDATELIST {     //编码选择列表信息   =〉管理编码窗口中的列表信息

    DWORD dwSize;  //

    DWORD dwStyle; // 列表串的取值方式

 

 

 

                     //                                    >1 dwOffset 表示地址

 

 

 

    DWORD dwCount; // 当前列表个数

    DWORD dwSelection; // 当前选择的列表序号

    DWORD dwPageStart; // 在列表窗口中所显示的列表的起始序号(上下翻页时用)

    DWORD dwPageSize; // 一页显示的列表个数

    DWORD dwOffset[]; // 列表数据存放区地址:[阿];[大]。。。。

    } CANDIDATELIST;

用字节表示的内存大小:=sizeof(CANDIDATELIST)+选择字符数据                                //=IME_CAND_UNKNOWN        列表数据的格式无定义                                //=IME_CAND_READ                读到什么数据即为什么数据,一般我们使用该属性                                //=IME_CAND_CODE               如果dwCount=1,dwOffset不是地址,而是实际数据,                                //=IME_CAND_MEANING                                //=IME_CAND_RADICAL                                //=IME_CAND_STROKES

6、COMPOSITIONFORM

typedef tagCOMPOSITIONFORM {    //窗口位置、大小信息:

                                     //由

    DWORD dwStyle;               //管理窗口方式

 

 

  

  

    POINT ptCurrentPos;        //给定坐标

    RECT rcArea;                 //给定窗口的小

}COMPOSITIONFORM;

IMC_SETCOMPOSITIONWINDOWIMC_SETCANDIDATEPOS消息使用                                                       //=CFS_DEFAULT               将编码窗口显示到隐含的位置                                                     //=CFS_FORCE_POSITION   // 以给定的坐标显示窗口,不受IME控制                                                 //=CFS_POINT                      // 以给定的坐标显示窗口,受IME控制                                                 //=CFS_RECT                      //以给定的大小显示窗口

7CANDIDATEFORM

The CANDIDATEFORM structure is used for IMC_GETCANDIDATEPOS and IMC_SETCANDIDATEPOS messages.

typedef tagCANDIDATEFORM {   //列表窗口信息

  

        DWORD dwIndex;        //列表窗口序号

        DWORD dwStyle;        //属性:

                                  //=

  

  

        POINT ptCurrentPos;  //坐标位置

        REC rcArea;           //不可显示区

} CANDIDATEFORM;

                                             //IMC_GETCANDIDATEPOSIMC_SETCANDIDATEPOS消息处理CFS_CANDIDATEPOS     指定显示位置                                              //=CFS_EXCLUDE                 不可显示                                              //=CFS_DEFAULT                 根据需要显示

8、STYLEBUF

typedef struct tagSTYLEBUF {    //注册字结构

        DWORD dwStyle;

        TCHAR szDescription[32]

} STYLEBUF;

9、SOFTKBDDATA

typedef struct tagSOFTKBDDATA {  //软键盘中各键对应的汉字

    UINT uCount;                  //键码数组个数(可以为1,2,当区分SHIFT键时为2,即:一组带SHIFT,一组不带SHIFT)

    WORD wCode[][256]             //对应的键码数据

} SOFTKBDDATA;

10、RECONVERTSTRING

typedef struct _tagRECONVERTSTRING {    //用于W98和2000

    DWOPD dwSize;

    DWORD dwVersion;

    DWORD dwStrLen;

    DWORD dwStrOffset;

    DWORD dwCompStrLen;

    DWORD dwCompStrOffset;

    DWORD dwTargetStrLen;

    DWORD dwTargetStrOffset;

} RECONVERTSTRING;

11、IMEMENUITEMINFO

typedef _tagIMEMENUITEMINFO {    //输入法菜单结构,W98/2000

    UINT cbSize;

    UINT fType;

    UINT fState;

    UINT wID;

    HBITMAP hbmpChecked;

    HBITMAP hbmpUnchecked;

    DWORD dwItemData;

    TCHAR szString[48];

    HBITMAP hbmpItem;

}

12、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;

    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;

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:319625次
    • 积分:3687
    • 等级:
    • 排名:第9142名
    • 原创:11篇
    • 转载:153篇
    • 译文:0篇
    • 评论:57条
    最新评论