看了自由拼音输入法的源代码,发现输入法的窗口不能随着应用程序的窗口移动而移动。
经过到网上找资料,并进行调试,找到了原因。
只要在处理下面这个消息时,
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;
没有评论:
发表评论