输入法编程-随应用程序的窗口移动

看了自由拼音输入法的源代码,发现输入法的窗口不能随着应用程序的窗口移动而移动。

经过到网上找资料,并进行调试,找到了原因。

只要在处理下面这个消息时,

case IMN_SETCOMPOSITIONWINDOW:

进行窗口移动,就可以了。

自由拼音输入法的代码如下:

case IMN_SETCOMPOSITIONWINDOW:
//设置编码窗口

if(wConversionSet & CONVERSION_SET_FOLLOW) {//光标跟随
POINT ptSrc;
SIZE szOffset;
HDC hDC;
HFONT oldFont;

ptSrc = lpIMC->cfCompForm.ptCurrentPos;
ClientToScreen(lpIMC->hWnd, &ptSrc);
hDC = GetDC(lpIMC->hWnd);
oldFont = SelectObject(hDC, hUIFont);
GetTextExtentPoint(hDC,"A",1,&szOffset);
SelectObject(hDC, oldFont);
ReleaseDC(lpIMC->hWnd,hDC);

lpUIExtra->uiComp.pt.x = ptSrc.x + szOffset.cx;
lpUIExtra->uiComp.pt.y = ptSrc.y + szOffset.cy;
MoveCompWindow(hWnd,lpUIExtra,lpIMC);//应用程序窗口移动,IME窗口跟着移动。
MoveCandWindow(hWnd,lpUIExtra,lpIMC);//这两行是后加的。

}
if (IsWindow(lpUIExtra->uiComp.hWnd))
InvalidateRect(lpUIExtra->uiComp.hWnd,NULL,FALSE);

break;

没有评论:

发表评论