ImmSetCompositionWindow没有显示任何窗口[c ++]

问题描述

我正在尝试将合成窗口强制放置在某个位置。 ImmSetCandidateWindow 可以正常工作,但 ImmSetCompositionWindow 不能正常工作。

我已经捕获了以下IME消息:

  • WM_IME_STARTCOMPOSITION-这部分是用来设置组成和候选窗口
  • WM_IME_ENDCOMPOSITION-仅跟踪功能
  • WM_IME_COMPOSITION-仅跟踪功能

这是示例代码

void Sample::ForcedIMEWindow(const POINT &ptwindow,HWND hwnd)
{
   HIMC himc = ImmGetContext(hwnd);
   if (himc == NULL) return;
   CANDIDATEFORM cdf;
   cdf.dwIndex = 0;
   cdf.dwStyle = CFS_CANDIDATEPOS;
   cdf.ptCurrentPos.x = ptwindow.x;
   cdf.ptCurrentPos.y = ptwindow.y;
   ImmSetCandidateWindow(himc,&cdf); // This is OK

   COMPOSITIONFORM cpf;
   ImmGetCompositionWindow(himc,&cpf);
   cpf.dwStyle = CFS_FORCE_POSITION;
   cpf.ptCurrentPos.x = ptwindow.x;
   cpf.ptCurrentPos.y = ptwindow.y;

   ImmSetCompositionWindow(himc,&cpf); // No Composition window shown

   ImmReleaseContext(hwnd,himc);
}

我有什么想念的吗?

TIA

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...