diff --git a/dlls/user32/edit.c b/dlls/user32/edit.c index 74e0ea460e6..1ce79db351e 100644 --- a/dlls/user32/edit.c +++ b/dlls/user32/edit.c @@ -5169,6 +5169,25 @@ LRESULT EditWndProc_common( HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam, B case WM_IME_CONTROL: break; + case WM_IME_REQUEST: + switch (wParam) + { + case IMR_QUERYCHARPOSITION: + { + LRESULT pos; + IMECHARPOSITION *chpos = (IMECHARPOSITION *)lParam; + + pos = EDIT_EM_PosFromChar(es, es->selection_start + chpos->dwCharPos, FALSE); + chpos->pt.x = LOWORD(pos); + chpos->pt.y = HIWORD(pos); + chpos->cLineHeight = es->line_height; + chpos->rcDocument = es->format_rect; + result = 1; + break; + } + } + break; + default: result = DefWindowProcT(hwnd, msg, wParam, lParam, unicode); break; diff --git a/include/imm.h b/include/imm.h index d03507257c8..aa2fa1dc892 100644 --- a/include/imm.h +++ b/include/imm.h @@ -129,6 +129,15 @@ typedef struct _tagCOMPOSITIONFORM typedef BOOL (CALLBACK* IMCENUMPROC)(HIMC, LPARAM); +typedef struct _tagIMECHARPOSITION +{ + DWORD dwSize; + DWORD dwCharPos; + POINT pt; + UINT cLineHeight; + RECT rcDocument; +} IMECHARPOSITION, *LPIMECHARPOSITION; + /* wParam for WM_IME_CONTROL */ #define IMC_GETCANDIDATEPOS 0x0007 #define IMC_SETCANDIDATEPOS 0x0008