gpt4 book ai didi

c - Windows API : Programmatically moving the Windows IME Input box possible?

转载 作者:行者123 更新时间:2023-12-05 05:53:19 30 4
gpt4 key购买 nike

问题

在 Windows 上,如果程序不使用其中一种 native API 来生成 GUI,则 Windows IME 会在左上角显示一个小文本框以输入 IME 字符串,就像日语一样。

enter image description here

可以通过 Windows API 以编程方式移动此文本框吗?我只是希望它大致移动到文本输入发生的位置,这样就不必一直查看左上角就不会那么刺耳。有人能给我指出正确的方向吗?阅读什么、在哪里搜索?

详情

我有一个 OpenGL 程序,上面有一个简单的即时模式 GUI 工具包。因此,此程序不会以任何有意义的方式与操作系统的 GUI 功能交互以提供操作系统 native 行为或可访问性功能。对于我的用例,类似于许多视频游戏,这很好。但是,如果我在程序中有文本框,通过 Windows 或 Google IME 输入文本是一种糟糕的体验,我想改进它。我不想再与 Windows 集成,只是将 IME 文本框大致移动到“程序中”文本框的正确位置。它是用 MinGW64 编译的,我已经使用了 Win32 API 函数,比如更改程序的窗口和任务栏图标。这是通过 Win32 api 实现的可能性吗?

最佳答案

以下代码用于将 IME 位置从默认位置移动到当前光标位置:

     if (msg.message == WM_IME_STARTCOMPOSITION) { // msg is windows message 
HIMC imc = ImmGetContext(msg.hwnd);
COMPOSITIONFORM cf;
cf.dwStyle = CFS_FORCE_POSITION;
POINT ptPos;
bool ret = GetCursorPos(&ptPos);
if (ret)
{
cf.ptCurrentPos.x = ptPos.x;
cf.ptCurrentPos.y = ptPos.y;
}
ImmSetCompositionWindow(imc, &cf);
ImmReleaseContext(msg.hwnd, imc);
}

WM_IME_STARTCOMPOSITION 是 Windows 在启动 IME 时发送给应用程序的消息类型。在您的应用程序中,当您查看或处理窗口消息时, try catch WM_IME_STARTCOMPOSITION,然后强制设置 IME 组合窗口位置。

关于c - Windows API : Programmatically moving the Windows IME Input box possible?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69911485/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com