第三章 ime文件中必须使用的结构

第三章 ime文件中必须使用的结构 

前二章我们讲述了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   当关闭输入法时,完成编码的转换 

                                   //     用于 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; 


以下内容积分高于 15 才可浏览
==============================

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 { 

    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; 

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

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

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

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;

============================== 
posted @ 2007-01-03 16:39  .NetFox  阅读(549)  评论(0)    收藏  举报