none
Text Services Framework(TSF)微软拼音输入法开发中遇到的问题 RRS feed

  • 问题

  • 各位C#大神们:

        你们好! 我在应用TSF开发微软拼音输入法过程中遇到了问题:按照微软官方提供的文档以及相关接口,每次只能得到固定的分页方式:每页10个备选项,而微软输入法界面默认最多一页有9个备选项,并且每个备选项都有对应的选择键(通过按下键盘上的数字1-9来选择)。这样的话,每页的第10个候选项虽然可以显示在输入法界面,但是第10个候选项每页对应的选择键来选择。我想知道有没有相关的接口可以设置tsf输入法的每页个数或者微软输入法界面能否提供选择第10个候选项对应的键盘按键?希望各位大神能够提供有效的方法,感激不尽 ~ 

       相关代码如下:

        private HRESULT UpdateUIElement(uint dwUIElementId)
            {
                ITfUIElement uiElement = null;
                try
                {
                    _softKeyBoard.ResetCandidateList();
                    _uiElementMgr.GetUIElement(dwUIElementId, out uiElement);
                    var candidateListUIElement = uiElement as ITfCandidateListUIElement;

                    if (candidateListUIElement != null)
                    {
                        uint candidateCount;
                        candidateListUIElement.GetCount(out candidateCount);

                        uint pageCount;
                        candidateListUIElement.GetPageIndex(null, 0, out pageCount);

                        if (pageCount > 0)
                        {
                            var pageStarts = new uint[pageCount];
                            candidateListUIElement.GetPageIndex(pageStarts, pageCount, out pageCount);

                            uint currentPage;
                            candidateListUIElement.GetCurrentPage(out currentPage);

                            var end = candidateCount;
                            var start = pageStarts[currentPage];

                            if (currentPage != pageCount - 1)
                            {
                                end = pageStarts[currentPage + 1];
                            }

                            for (var i = start; i < end; ++i)
                            {
                                string candidate;
                                candidateListUIElement.GetString(i, out candidate);
                                _softKeyBoard.UpdateCandidateItem((int)i, candidate);
                            }
                        }
                    }
                }
                catch (Exception ex)
                {

                }
                finally
                {
                    if (uiElement != null)
                    {
                        Marshal.ReleaseComObject(uiElement);
                    }
                }

                return new HRESULT();
            }

    2018年7月10日 1:41

全部回复