|
一般之前人說用WM_IME_CHAR及WM_CHAR但此種作法不是一個良好的方法,而且在雙位元版時會有一些問題出現,所以建議採用下列方法,上述夾檔是MSDN中的範例,大多可以運用,但在嘸蝦米輸入法及一些不是微軟輸入法上運用上可能要有所修改,下面是參考別人的資料及上例範例中的小整理。夾檔:
IMEAPPS.zip
// 輸入法設定狀態 HKL hkl = GetKeyboardLayout(0); if(ImmIsIME(hkl)) { ImmEscape(hkl, hIMC, IME_ESC_IME_NAME, IMEName); if(IMEFullShape) sprintf(IMEShape, _T("【%s/全】"), IMEName); else sprintf(IMEShape, _T("【%s/半】"), IMEName); } else { strcpy(IMEShape,_T("【EN】")); }
// 當中文輸入時 case WM_IME_COMPOSITION: hIMC = ImmGetContext(hWnd); // 取得中文組字 if (lParam & GCS_COMPSTR) { dwSize = ImmGetCompositionString(hIMC,GCS_COMPSTR,szCompReadStr,sizeof(szCompReadStr)); dwSize /= sizeof(TCHAR); szCompReadStr[dwSize] = TCHAR('\0'); }
if(lParam & GCS_COMPREADSTR) { dwSize = ImmGetCompositionString(hIMC, GCS_COMPREADSTR, (void*)szCompStr, sizeof(szCompStr)); dwSize /= sizeof(TCHAR); szCompStr[dwSize] = TCHAR('\0'); }
if(lParam & GCS_RESULTSTR) { // 取得輸出字元 dwSize = ImmGetCompositionString(hIMC, GCS_RESULTSTR, (void*)szChStr, sizeof(szChStr)); dwSize /= sizeof(TCHAR); szChStr[dwSize] = TCHAR('\0'); lstrcat(m_szLineStr, szChStr); } break;
|
|