还是输入法。。。

jenywang19860428 2009-11-19 10:36:37
通过捕获IMN_OPENCANDIDATE、IMN_CLOSECANDIDATE消息判断输入法窗口的打开和关闭,奇怪的是微软拼音输入法窗口打开和关闭时捕获不到这个消息;

我是在WH_CALLWNDPROC中捕获的,不知道是什么原因,还请了解这方面的前辈指点一下!!!!
...全文
56 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
jenywang19860428 2009-11-23
  • 打赏
  • 举报
回复
一楼大哥说的有理,LONG IMENotyHandle(HIMC hUICurIMC, HWND hWnd, UINT message, WPARAM wParam, LPARAM
lParam)消息响应函数是自定义的还是编译器库中的呢?我不是很理解,这个函数是怎么来的?刚学vc还请指点一二!!!!
MoXiaoRab 2009-11-19
  • 打赏
  • 举报
回复
你是这么做的么?
WM_IME_NOTIFY消息子消息IMN_SETCOMPOSITIONWINDOW(设置编码窗口消息)被触发时系统会返回正
确坐标位置WM_IME_NOTIFY消息响应类似如下形式:
/* 
* IMENotyHandle:
*
* Handle WM_IME_NOTIFY messages.
*/
LONG IMENotyHandle(HIMC hUICurIMC, HWND hWnd, UINT message, WPARAM wParam, LPARAM
lParam)
{
LONG lRet = 0L;
LPINPUTCONTEXT lpIMC;

(!(lpIMC = ImmLockIMC(hUICurIMC)))
0L;

switch (wParam)
{
IMN_CLOSESTATUSWINDOW:
TRACE(\"UIWnd:WM_IME_NOTIFY:IMN_CLOSESTATUSWINDOW\\n\");

/// hide the status window
g_pStatus->Hide;
;

IMN_OPENSTATUSWINDOW:
TRACE(\"UIWnd:WM_IME_NOTIFY:IMN_OPENSTATUSWINDOW\\n\");

/// create the status window, but don\'t show
g_pStatus->Create(hWnd);
;

IMN_OPENCANDIDATE:
TRACE(\"UIWnd:WM_IME_NOTIFY:IMN_OPENCANDIDATE\\n\");
;

IMN_CHANGECANDIDATE:
TRACE(\"UIWnd:WM_IME_NOTIFY:IMN_CHANGECANDIDATE\\n\");
;

IMN_CLOSECANDIDATE:
TRACE(\"UIWnd:WM_IME_NOTIFY:IMN_CLOSECANDIDATE\\n\");
;

IMN_SETCONVERSIONMODE:
TRACE(\"UIWnd:WM_IME_NOTIFY:IMN_SETCONVERSIONMODE\\n\");

/// repa the status window
g_pStatus->Repa;
;

IMN_SETSENTENCEMODE:
TRACE(\"UIWnd:WM_IME_NOTIFY:IMN_SETSENTENCEMODE\\n\");
;

IMN_SETOPENSTATUS:
TRACE(\"UIWnd:WM_IME_NOTIFY:IMN_SETOPENSTATUS\\n\");

/// repa the status window
g_pStatus->Repa;
;

IMN_SETCANDIDATEPOS:
TRACE(\"UIWnd:WM_IME_NOTIFY:IMN_SETCANDIDATEPOS\\n\");
;

IMN_SETCOMPOSITIONFONT:
TRACE(\"UIWnd:WM_IME_NOTIFY:IMN_SETCOMPOSITIONFONT\\n\");
;

IMN_SETCOMPOSITIONWINDOW:
TRACE(\"UIWnd:WM_IME_NOTIFY:IMN_SETCOMPOSITIONWINDOW\\n\");

/// adjust the postion of comp and cand windows
POINT ptSrc;
SIZE szOff;
HDC hDC;

ptSrc = lpIMC->cfCompForm.ptCurrentPos;
ClientToScreen(lpIMC->hWnd, &ptSrc);
hDC = GetDC(lpIMC->hWnd);
GetTextExtentPo(hDC,\"A\",1,&szOff);


ReleaseDC(lpIMC->hWnd,hDC);

g_ptTopLeft.x = ptSrc.x + szOff.cx;
g_ptTopLeft.y = ptSrc.y + szOff.cy;
;

IMN_GUIDELINE:
TRACE(\"UIWnd:WM_IME_NOTIFY:IMN_GUIDELINE\\n\");
;

IMN_SETSTATUSWINDOWPOS:
TRACE(\"UIWnd:WM_IME_NOTIFY:IMN_SETSTATUSWINDOWPOS\\n\");
;

IMN_PRIVATE:
TRACE(\"UIWnd:WM_IME_NOTIFY:IMN_PRIVATE\\n\");
;

default:
;
}

ImmUnlockIMC(hUICurIMC);

lRet;
}
老吴笔记 2009-11-19
  • 打赏
  • 举报
回复
1楼高手啊,膜拜,顺便接点分。
  • 打赏
  • 举报
回复

16,551

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Creator Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧