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

时间:2020-11-09 09:02:35

标签: c++ ime

我正在尝试将合成窗口强制放置在某个位置。 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

0 个答案:

没有答案
相关问题