我正在尝试将合成窗口强制放置在某个位置。 ImmSetCandidateWindow 可以正常工作,但 ImmSetCompositionWindow 不能正常工作。
我已经捕获了以下IME消息:
这是示例代码:
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