コード例 #1
0
ファイル: DXUTguiIME.cpp プロジェクト: MindCodeTech/DXUT
//--------------------------------------------------------------------------------------
_Use_decl_annotations_
DXUTAPI bool CDXUTIMEEditBox::StaticMsgProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
	UNREFERENCED_PARAMETER(hWnd);
	UNREFERENCED_PARAMETER(wParam);

	if (!ImeUi_IsEnabled())
		return false;

#if defined(DEBUG) || defined(_DEBUG)
	m_bIMEStaticMsgProcCalled = true;
#endif

	switch (uMsg)
	{
	case WM_INPUTLANGCHANGE:
		DXUTTRACE(L"WM_INPUTLANGCHANGE\n");
		{
		}
		return true;

	case WM_IME_SETCONTEXT:
		DXUTTRACE(L"WM_IME_SETCONTEXT\n");
		//
		// We don't want anything to display, so we have to clear this
		//
		lParam = 0;
		return false;

		// Handle WM_IME_STARTCOMPOSITION here since
		// we do not want the default IME handler to see
		// this when our fullscreen app is running.
	case WM_IME_STARTCOMPOSITION:
		DXUTTRACE(L"WM_IME_STARTCOMPOSITION\n");
		ResetCompositionString();
		// Since the composition string has its own caret, we don't render
		// the edit control's own caret to avoid double carets on screen.
		s_bHideCaret = true;
		return true;
	case WM_IME_ENDCOMPOSITION:
		DXUTTRACE(L"WM_IME_ENDCOMPOSITION\n");
		s_bHideCaret = false;
		return false;
	case WM_IME_COMPOSITION:
		DXUTTRACE(L"WM_IME_COMPOSITION\n");
		return false;
	}

	return false;
}
コード例 #2
0
ファイル: IME.cpp プロジェクト: MagistrAVSH/node3d
bool CIME::StaticMsgProc(UINT uMsg, WPARAM wParam, LPARAM lParam)
{
	HIMC hImc;

	if(!s_bEnableImeSystem)
		return false;

#if defined(DEBUG) || defined(_DEBUG)
	m_bIMEStaticMsgProcCalled = true;
#endif

	switch(uMsg)
	{
	case WM_ACTIVATEAPP:
		if(wParam)
		{
			// Populate s_Locale with the list of keyboard layouts.
			UINT cKL = GetKeyboardLayoutList(0, NULL);
			s_Locale.clear();
			HKL *phKL = new HKL[cKL];
			if(phKL)
			{
				GetKeyboardLayoutList(cKL, phKL);
				for(UINT i = 0; i < cKL; ++i)
				{
					CInputLocale Locale;

					// Filter out East Asian languages that are not IME.
					if((PRIMARYLANGID(LOWORD(phKL[i])) == LANG_CHINESE ||
						PRIMARYLANGID(LOWORD(phKL[i])) == LANG_JAPANESE ||
						PRIMARYLANGID(LOWORD(phKL[i])) == LANG_KOREAN) &&
						!_ImmIsIME(phKL[i]))
						continue;

					// If this language is already in the list, don't add it again.
					bool bBreak = false;
					for(size_t e = 0; e < s_Locale.size(); ++e)
						if(LOWORD(s_Locale[e].m_hKL) ==
							LOWORD(phKL[i]))
						{
							bBreak = true;
							break;
						}
						if(bBreak)
							break;

						Locale.m_hKL = phKL[i];
						WCHAR wszDesc[128] = L"";
						switch(PRIMARYLANGID(LOWORD(phKL[i])))
						{
							// Simplified Chinese
						case LANG_CHINESE:
							switch(SUBLANGID(LOWORD(phKL[i])))
							{
							case SUBLANG_CHINESE_SIMPLIFIED:
								Locale.m_wstrLangAbb = s_aszIndicator[INDICATOR_CHS];
								break;
							case SUBLANG_CHINESE_TRADITIONAL:
								Locale.m_wstrLangAbb = s_aszIndicator[INDICATOR_CHT];
								break;
							default:    // unsupported sub-language
								GetLocaleInfoW(MAKELCID(LOWORD(phKL[i]), SORT_DEFAULT), LOCALE_SABBREVLANGNAME, wszDesc, 128);
								Locale.m_wstrLangAbb = wszDesc[0];
								Locale.m_wstrLangAbb += towlower(wszDesc[1]);
								break;
							}
							break;
							// Korean
						case LANG_KOREAN:
							Locale.m_wstrLangAbb = s_aszIndicator[INDICATOR_KOREAN];
							break;
							// Japanese
						case LANG_JAPANESE:
							Locale.m_wstrLangAbb = s_aszIndicator[INDICATOR_JAPANESE];
							break;         
						default:
							// A non-IME language.  Obtain the language abbreviation
							// and store it for rendering the indicator later.
							GetLocaleInfoW(MAKELCID(LOWORD(phKL[i]), SORT_DEFAULT), LOCALE_SABBREVLANGNAME, wszDesc, 128);
							Locale.m_wstrLangAbb = wszDesc[0];
							Locale.m_wstrLangAbb += towlower(wszDesc[1]);
							break;
						}

						GetLocaleInfoW(MAKELCID(LOWORD(phKL[i]), SORT_DEFAULT), LOCALE_SLANGUAGE, wszDesc, 128);
						Locale.m_wstrLang = wszDesc;

						s_Locale.push_back(Locale);
				}
				delete[] phKL;
			}
		}
		break;

	case WM_INPUTLANGCHANGE:
		UITRACE(L"WM_INPUTLANGCHANGE\n");
		{
			UINT uLang = GetPrimaryLanguage();
			CheckToggleState();
			if (uLang != GetPrimaryLanguage())
			{
				// Korean IME always inserts on keystroke.  Other IMEs do not.
				s_bInsertOnType = (GetPrimaryLanguage() == LANG_KOREAN);
			}

			// IME changed.  Setup the new IME.
			SetupImeApi();
			if(_ShowReadingWindow)
			{
				if (NULL != (hImc = ImmGetContext(UIGetHWND())))
				{
					_ShowReadingWindow(hImc, false);
					_ImmReleaseContext(UIGetHWND(), hImc);
				}
			}
		}
		return true;

	case WM_IME_SETCONTEXT:
		UITRACE(L"WM_IME_SETCONTEXT\n");
		//
		// We don't want anything to display, so we have to clear this
		//
		lParam = 0;
		return false;

		// Handle WM_IME_STARTCOMPOSITION here since
		// we do not want the default IME handler to see
		// this when our fullscreen app is running.
	case WM_IME_STARTCOMPOSITION:
		UITRACE(L"WM_IME_STARTCOMPOSITION\n");
		ResetCompositionString();
		// Since the composition string has its own caret, we don't render
		// the edit control's own caret to avoid double carets on screen.
///ghghgh		s_bHideCaret = true;
		return true;

	case WM_IME_COMPOSITION:
		UITRACE(L"WM_IME_COMPOSITION\n");
		return false;
	}

	return false;
}