BOOL cIMEWnd::OnMsg(HWND hWnd, UINT msg, WPARAM wparam, LPARAM lparam) { if(!m_pDockingEx ) return FALSE; switch(msg) { case WM_IME_COMPOSITION: case WM_IME_CHAR: { return OnIMEComposition(hWnd, msg, wparam, lparam); } break; case WM_CHAR: { return OnChar(hWnd, msg, wparam, lparam); } break; case WM_KEYDOWN: { return OnKey(hWnd, msg, wparam, lparam); } break; case WM_KEYUP: { if( wparam == VK_CONTROL ) m_bCtrlPushed = FALSE; } break; } return TRUE; }
bool CImeView::IsYouMessage(UINT msg,WPARAM wparam, LPARAM lparam) { if(!m_hWnd) return FALSE; switch (msg) { case WM_IME_STARTCOMPOSITION: // 글자 조합의 시작. WM_IME_COMPOSITION 메시지를 // 받을 준비를 한다. OnIMEStartComposition(wparam,lparam); return TRUE; case WM_IME_ENDCOMPOSITION: // 글자 조합의 끝. 조합된 문자열 처리를 끝낸다 break; OnIMEEndComposition(wparam,lparam); ///버튼 클릭시 현재 조합중이던 글자가 날라가 버리는 현상을 막기 위해 ///현재 Focus를 가지진 EditBox에 조합중이던 글자를 보내주고 처리하도록 한다. memset(m_TextComp,0,3); return TRUE; case WM_IME_COMPOSITION: // 현재 조합중인 문자열이나 완성된 문자열을 얻어서 화면 출력 OnIMEComposition(wparam,lparam); InvalidateRect(m_hWnd,NULL,TRUE); return TRUE; case WM_IME_SETCONTEXT: // 글자 조합 윈도우와 한자 변환 윈도우를 표시하지 않게 바꿈 OnIMESetContext(wparam,lparam); return TRUE; case WM_IME_NOTIFY: OnIMENotify(wparam,lparam); return TRUE; case WM_INPUTLANGCHANGE: // 키보드 레이아웃이 바뀌는 경우 IME를 초기화 OnInputLangChange(wparam,lparam); return TRUE; case WM_IME_CONTROL: OnIMEControl(wparam,lparam); return TRUE; case WM_IME_COMPOSITIONFULL: OnIMECompositionFull(wparam,lparam); return TRUE; case WM_CHAR: OnChar((UINT)wparam); InvalidateRect(m_hWnd,NULL,TRUE); break; case WM_KEYDOWN: switch(wparam) { case VK_RETURN: memset(m_TextComp, 0, sizeof(char) * 3); break; case VK_SPACE: memset(m_TextComp, 0, sizeof(char) * 3); break; } break; } return FALSE; }