ime文件中必须使用的结构

转载 2006年05月29日 17:36:00

前二章我们讲述了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;

IME输入法编程心得

 原文链接:IME输入法编程心得 posted @ 2012-11-30 00:42 from [FreedomShe] 自然语言处理的输入法作业成品没有做出来,但不想再在...
  • kenkao
  • kenkao
  • 2016年05月29日 17:16
  • 1540

彻底解决Win10频繁禁用IME或者已禁用IME后无法启用的问题

在任务计划程序中,找到microsoft-windows-TextServicesFramework,如下图: 已禁用IME时,上图的红圈圈部分会显示“准备就绪”,通常情况下,在网上能找到的解决办...
  • xgl272268065
  • xgl272268065
  • 2015年12月15日 14:38
  • 17445

Win7 64位系统,使用(IME)模式VS2010 编写 和 安装 输入法 教程(1)

首先感谢: http://blog.csdn.net/shuilan0066/article/details/6884483输入法 编程分析 http://blog.csdn.net/mspiny...
  • fakine
  • fakine
  • 2016年09月09日 16:08
  • 2427

Android获取IME,IMSI等各种手机信息,并对号码组成详解

本文转载自http://www.cnblogs.com/zyw-205520/p/3829119.html 简介: IMSI:international mobiles subscribe...
  • cajian3
  • cajian3
  • 2016年08月20日 10:41
  • 2628

UE4项目工程的目录结构

根目录 Engine -包含了所有源代码,内容等,它们组成了整个引擎。 Templates -在创建新项目 时的可用项目模板集合。 GenerateProjectFiles.bat - ...
  • a359877454
  • a359877454
  • 2016年11月28日 19:23
  • 2732

EditText设置IME动作问题

在Android Studio的Templates中的Login Activity中,看到了EditText中可以设置android:imeOptions、android:imeActionId以及a...
  • mzhhzm008
  • mzhhzm008
  • 2016年06月08日 22:03
  • 2207

datatable同结构和不同结构的合并

同结构合并DataTable dt1 = new DataTable(); DataTable dt2 = new DataTable(); InitD...
  • zhangxiaomin1992
  • zhangxiaomin1992
  • 2016年01月13日 14:09
  • 244

Android项目目录结构介绍(续)——AndroidManifest.xml文件介绍

AndroidManifest.xml文件概况 AndroidManifest.xml清单文件是每个Android项目所必需的,它是整个Android应用的全局描述文件。AndroidManifes...
  • fxdaniel
  • fxdaniel
  • 2014年12月01日 10:14
  • 1044

spinner的使用

虽然现在spinner在实际项目中用到的并不是很多,更多的需求还是用自定义popupWindow和dialog的来代替,但是当我们有一些简单的小需求时用spinner快速实现也不失为一种好的选择。 资...
  • TheMeLove
  • TheMeLove
  • 2015年12月04日 13:43
  • 474

android源码分析之View的事件分发(上)

本文旨在分析View的事件分发机制
  • yangzhihuiguming
  • yangzhihuiguming
  • 2016年04月27日 08:51
  • 1620
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:ime文件中必须使用的结构
举报原因:
原因补充:

(最多只允许输入30个字)