svnno****@sourc*****
svnno****@sourc*****
2010年 5月 20日 (木) 01:26:50 JST
Revision: 3898 http://sourceforge.jp/projects/ttssh2/svn/view?view=rev&revision=3898 Author: yutakapon Date: 2010-05-20 01:26:50 +0900 (Thu, 20 May 2010) Log Message: ----------- IMEã®on/offç¶æ ãè¦ã¦ãã«ã¼ã½ã«ã®è²ãå¤æ´ããã WM_INPUTLANGCHANGE, WM_IME_NOTIFY ã§ã¯ã«ã¼ã½ã«ã®åæç»ã®ã¿è¡ãã æ³¨ï¼ Cursor control sequenceãæå¹ã®å ´åãvimã®å ¥åã¢ã¼ãã§ã¯ä¸ç·ã«ã¼ã½ã«ã« ãªãããããã¾ãå¤åãåããã«ããã Modified Paths: -------------- trunk/teraterm/teraterm/vtdisp.c trunk/teraterm/teraterm/vtwin.cpp trunk/teraterm/teraterm/vtwin.h -------------- next part -------------- Modified: trunk/teraterm/teraterm/vtdisp.c =================================================================== --- trunk/teraterm/teraterm/vtdisp.c 2010-05-19 15:04:50 UTC (rev 3897) +++ trunk/teraterm/teraterm/vtdisp.c 2010-05-19 16:26:50 UTC (rev 3898) @@ -2104,10 +2104,26 @@ // Turn on the cursor { int CaretX, CaretY, H; + HIMC hImc; + HBITMAP color; + int ime_on; if (ts.KillFocusCursor == 0 && !Active) return; + /* IMEÌon/offóÔð©ÄAJ[\ÌFðÏX·éB + * WM_INPUTLANGCHANGE, WM_IME_NOTIFY ÅÍJ[\ÌÄ`æÌÝs¤B + * (2010.5.20 yutaka) + */ + hImc = ImmGetContext(HVTWin); + ime_on = ImmGetOpenStatus(hImc); + ImmReleaseContext(HVTWin, hImc); + if (ime_on) { + color = (HBITMAP)1; + } else { + color = NULL; + } + CaretX = (CursorX-WinOrgX)*FontWidth; CaretY = (CursorY-WinOrgY)*FontHeight; @@ -2133,11 +2149,11 @@ DestroyCaret(); if (CursorOnDBCS) { /* double width caret */ - CreateCaret(HVTWin, 0, FontWidth*2, H); + CreateCaret(HVTWin, color, FontWidth*2, H); } else { /* single width caret */ - CreateCaret(HVTWin, 0, FontWidth, H); + CreateCaret(HVTWin, color, FontWidth, H); } CaretStatus = 1; } Modified: trunk/teraterm/teraterm/vtwin.cpp =================================================================== --- trunk/teraterm/teraterm/vtwin.cpp 2010-05-19 15:04:50 UTC (rev 3897) +++ trunk/teraterm/teraterm/vtwin.cpp 2010-05-19 16:26:50 UTC (rev 3898) @@ -48,6 +48,7 @@ #include <imagehlp.h> #include <windowsx.h> +#include <imm.h> #include "tt_res.h" #include "vtwin.h" @@ -125,6 +126,8 @@ ON_WM_TIMER() ON_WM_VSCROLL() ON_MESSAGE(WM_IME_COMPOSITION,OnIMEComposition) + ON_MESSAGE(WM_INPUTLANGCHANGE,OnIMEInputChange) + ON_MESSAGE(WM_IME_NOTIFY,OnIMENotify) //<!--by AKASI ON_MESSAGE(WM_WINDOWPOSCHANGING,OnWindowPosChanging) ON_MESSAGE(WM_SETTINGCHANGE,OnSettingChange) @@ -2898,6 +2901,22 @@ return CFrameWnd::DefWindowProc(WM_IME_COMPOSITION,wParam,lParam); } +LONG CVTWindow::OnIMEInputChange(UINT wParam, LONG lParam) +{ + ChangeCaret(); + + return CFrameWnd::DefWindowProc(WM_INPUTLANGCHANGE,wParam,lParam); +} + +LONG CVTWindow::OnIMENotify(UINT wParam, LONG lParam) +{ + if (wParam == IMN_SETOPENSTATUS) { + ChangeCaret(); + } + + return CFrameWnd::DefWindowProc(WM_IME_NOTIFY,wParam,lParam); +} + LONG CVTWindow::OnAccelCommand(UINT wParam, LONG lParam) { switch (wParam) { Modified: trunk/teraterm/teraterm/vtwin.h =================================================================== --- trunk/teraterm/teraterm/vtwin.h 2010-05-19 15:04:50 UTC (rev 3897) +++ trunk/teraterm/teraterm/vtwin.h 2010-05-19 16:26:50 UTC (rev 3898) @@ -97,6 +97,8 @@ afx_msg LONG OnExitSizeMove(UINT wParam, LONG lParam); //--> afx_msg LONG OnIMEComposition(UINT wParam, LONG lParam); + afx_msg LONG OnIMEInputChange(UINT wParam, LONG lParam); + afx_msg LONG OnIMENotify(UINT wParam, LONG lParam); afx_msg LONG OnAccelCommand(UINT wParam, LONG lParam); afx_msg LONG OnChangeMenu(UINT wParam, LONG lParam); afx_msg LONG OnChangeTBar(UINT wParam, LONG lParam);