|
|
一般之前人說用WM_IME_CHAR及WM_CHAR但此種作法不是一個良好的方法,而且在雙位元版時會有一些問題出現,所以建議採用下列方法,上述夾檔是MSDN中的範例,大多可以運用,但在嘸蝦米輸入法及一些不是微軟輸入法上運用上可能要有所修改,下面是參考別人的資料及上例範例中的小整理。夾檔: IMEAPPS.zip/ m. z4 d4 V- ` a6 j
. \" b3 u( q/ K# _, D, _3 i
// 輸入法設定狀態
" i1 f7 R5 J$ EHKL hkl = GetKeyboardLayout(0);
1 c% Z0 h$ u2 Hif(ImmIsIME(hkl))
% f! q6 {& r" D{9 X' C3 G; _6 A1 R+ u6 \
ImmEscape(hkl, hIMC, IME_ESC_IME_NAME, IMEName);
* S+ r2 Y4 G' r R B if(IMEFullShape)
- p* I7 T6 S1 S) h) U( A sprintf(IMEShape, _T("【%s/全】"), IMEName);
) w! G8 z+ D7 B! H7 v else
9 L; {1 W. F, r+ V# `1 |" ` sprintf(IMEShape, _T("【%s/半】"), IMEName);
1 y' w1 p+ Q Q! P$ O4 E}
4 X4 L2 e; w5 G( i$ Q* Jelse
$ V6 M1 R' R0 t4 w{
% d/ j! t4 J! d strcpy(IMEShape,_T("【EN】"));
7 Q( Q* o" R; k}
" X7 @3 g4 l) {2 H( `, r8 v' I* D# E6 [( d; Y$ V7 `4 g6 F8 h3 b
// 當中文輸入時/ N2 ~; ?% W% a1 c! v+ J& I
case WM_IME_COMPOSITION:/ V, k W8 F' D) t/ K2 @; h
hIMC = ImmGetContext(hWnd);
+ V. q- Q: ?: x* ?$ I // 取得中文組字! T* m' V' n7 @& _
if (lParam & GCS_COMPSTR)( `1 k& e3 X$ ]2 B! k
{
2 }! c5 W# V3 T9 q* e dwSize = ImmGetCompositionString(hIMC,GCS_COMPSTR,szCompReadStr,sizeof(szCompReadStr));5 d& v) L* l \$ l, n" K
dwSize /= sizeof(TCHAR);+ O1 V. N8 T/ A3 Z2 g+ y, l5 ]
szCompReadStr[dwSize] = TCHAR('\0');
8 b4 w" @6 i" f( o. S1 D6 f }
" U; v2 R2 I( r& }- @ X4 a, V
- R6 ` T4 A% C7 i' o+ ~+ [6 ?: a if(lParam & GCS_COMPREADSTR)' D' Y! x4 r( k
{
) `# a* G9 f* ?( V dwSize = ImmGetCompositionString(hIMC, GCS_COMPREADSTR, (void*)szCompStr, sizeof(szCompStr));7 C9 n2 W# T- y# L. H
dwSize /= sizeof(TCHAR);' n" `/ p- v) C4 p5 P, W
szCompStr[dwSize] = TCHAR('\0');
" H) M$ O v( p g$ P9 W }: i7 ^4 n8 U {& o' M
9 a6 J; {& a1 V" y9 {+ b7 F' o8 e( P
if(lParam & GCS_RESULTSTR)
6 l$ I- L: M, ` {
. u" T4 G9 Y4 F; G. I // 取得輸出字元7 V/ c N/ M, G. H) r! R/ k
dwSize = ImmGetCompositionString(hIMC, GCS_RESULTSTR, (void*)szChStr, sizeof(szChStr));' |7 z p2 Z1 j! V; p
dwSize /= sizeof(TCHAR);
: ?+ D" t; g6 g8 J' } szChStr[dwSize] = TCHAR('\0');
: w/ N- @6 u: X: r lstrcat(m_szLineStr, szChStr);
$ x- s/ q3 C9 X1 z4 v }
+ m. e5 f0 u3 A( Y9 h6 ] break; |
|