主要响应 WM_IME_COMPOSITION 消息,在此设置输入法框的位置
SDI 视图类中没有WM_IME_COMPOSITION消息,所以,需要自己在PreTranslateMessage 中设置
//输入法跟随
LRESULT OnImeStartComposition(WPARAM wParam,LPARAM lParam);
LRESULT OnImeStartComposition(WPARAM wParam, LPARAM lParam)
{
HIMC hIMC = ::ImmGetContext(m_hWnd);
COMPOSITIONFORM CompForm;
CompForm.dwStyle=CFS_POINT;
CompForm.dwStyle=CFS_POINT;
int nx = 200;
int ny = 200;
if (pCurrentElem)
{
Word *pCurWord = (Word*)pCurrentElem;
nx = pCurWord->Left;
ny = pCurWord->Bottom;
}
CompForm.ptCurrentPos.x=nx;// 实际的值
CompForm.ptCurrentPos.y=ny;//用实际的值代替
::ImmSetCompositionWindow(hIMC, &CompForm);
::ImmReleaseContext(m_hWnd,hIMC);
//HIMC hIMC = ::ImmGetContext(m_hWnd);
//COMPOSITIONFORM CompForm;
//CompForm.dwStyle = CFS_POINT;
//CompForm.ptCurrentPos.x = 10;//用实际的值代替
//CompForm.ptCurrentPos.y = 10;//用实际的值代替
//::ImmSetCompositionWindow(hIMC, &CompForm);
DropCaret();可在此处隐藏光标,在OnImeEndComposition消息处理中再显示光标
//::ImmReleaseContext(m_hWnd, hIMC);
return ::DefWindowProc(m_hWnd,WM_IME_STARTCOMPOSITION, wParam, lParam);
}
BOOL PreTranslateMessage(MSG* pMsg)
{
// TODO: 在此添加专用代码和/或调用基类
if (m_hAccelerator)
if (::TranslateAccelerator(this->m_hWnd, m_hAccelerator, pMsg))
return(TRUE);
//输入法的跟随功能 响应三个消息 WM_IME_STARTCOMPOSITION;WM_IME_ENDCOMPOSITION;WM_IME_COMPOSITION;
switch (pMsg->message)
{
case WM_IME_STARTCOMPOSITION:
{
OnImeStartComposition(pMsg->wParam, pMsg->lParam);
}
至此,就完成了
TXT有声大屏阅读软件,告一段落,已经可以非常友好的使用了。
下载地址: 古典小说网