【问题标题】:I don't know why can't I get "Hanja list" of ImmGetCandidateList() func我不知道为什么我不能得到 ImmGetCandidateList() func 的“汉字列表”
【发布时间】:2018-10-11 06:15:20
【问题描述】:

我尝试了一些代码来获取韩国操作系统 win7 和 win10 中 ImmGetCandidateList() 的“汉字列表”。

我正在制作游戏。我在游戏中需要一个汉字列表。 当我在 Windows7 中运行时,我可以使用 ImmGetCandidateList() 获取汉字列表。 但是,在Windows10中运行时,无法获取HanjaList。

我不知道为什么会这样。

代码

DWORD dwBufLen = 0;
LPCANDIDATELIST pCandiList = (LPCANDIDATELIST)new CHAR[1024];
HHOOK gHook;

LRESULT CALLBACK WinHookCallBack(INT nCode, WPARAM wParam, LPARAM lParam)
{
    CWPSTRUCT* lpWp = (CWPSTRUCT*)lParam;
    switch (lpWp->message)
    {
    case WM_IME_NOTIFY:
    {
        if (lpWp->wParam == IMN_OPENCANDIDATE)
        {
            return 0;
        }
        HIMC hImc = ImmGetContext(hWnd);
        memset(pCandiList, 0, sizeof(CHAR) * 1024);
        dwBufLen = ImmGetCandidateList(hImc, 0, pCandiList, 0);
        ImmReleaseContext(hWnd, hImc);
    }break;

    default:
        break;
    }

    return CallNextHookEx(gHook, nCode, lpWp->wParam, lpWp->lParam);
}

BOOL InitInstance(HINSTANCE hInstance, int nCmdShow)
{

   hInst = hInstance; // Store instance handle in our global variable

   hWnd = CreateWindow(szWindowClass, szTitle, WS_OVERLAPPEDWINDOW,
      CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, NULL, NULL, hInstance, NULL);

   if (!hWnd)
   {
      return FALSE;
   }

   HWND hWndEdit = CreateWindowEx(WS_EX_CLIENTEDGE, TEXT("edit"), TEXT("test"), WS_CHILD | WS_VISIBLE, 100, 20, 140, 20, hWnd, NULL, NULL, NULL);
   ShowWindow(hWnd, nCmdShow);
   UpdateWindow(hWnd);

   gHook = SetWindowsHookEx(WH_CALLWNDPROC, WinHookCallBack,     GetModuleHandle(NULL), GetWindowThreadProcessId(hWnd, NULL));

   HWND hWndIME = ImmGetDefaultIMEWnd(hWnd);
   ShowOwnedPopups(hWndIME, false);

   return TRUE;
}

我为 IME 测试做了一个简单的 win32 项目。 我尝试了两种方法。

focused outside of textfield

focused textfiedl

当我专注于 Textfield 之外时。 dwBufLen 大于零。 但是,当我关注 Textfield 时。 dwBufLen 为零。我可以看到默认的候选窗口。

我认为当默认候选窗口禁用时,我可以获得汉字列表。

当我关注文本字段时如何获得汉字列表。

我需要一个在 MyProject 中使用的汉字候选列表。

感谢您阅读我的帖子。 :)

【问题讨论】:

    标签: ime


    【解决方案1】:

    当我集成 DxDsample 的 TSFsystem 时。它在 Win10 中工作。

    如果有人遇到问题,请尝试。

    【讨论】:

      猜你喜欢
      • 2022-01-24
      • 2019-11-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多