我的程序里用OnChar捕捉字符的输入,并对捕捉的字符进行一定的操作(主要是插入操作)这一操作比较费时,输入英文时因为每按键一次就出发一个OnChar,而按键速度不会太快,所以速度还可以接受。但输入中文时因为是系统对输入的字符进行缓冲,即键入一串字符再回车后,系统向程序发送一系列的OnChar消息,连续处理这一系列OnChar消息就显得很慢。
我的想法是写一个插入字符串的方法,把一次输入的所有字符接收完毕后统一进行插入,但是现在我不知道如何判断每次回车前用户到底敲入了多少字符,不知哪位有没有相应的经验。
我的想法是写一个插入字符串的方法,把一次输入的所有字符接收完毕后统一进行插入,但是现在我不知道如何判断每次回车前用户到底敲入了多少字符,不知哪位有没有相应的经验。
LRESULT CXXXView::WindowProc(UINT message, WPARAM wParam, LPARAM lParam)
{
if(message == WM_IME_ENDCOMPOSITION)
{
HIMC hIMC = ImmGetContext(this->m_hWnd);
m_nIMECharSize = ImmGetCompositionString(hIMC, GCS_RESULTSTR, 0, 0);
ImmReleaseContext(this->m_hWnd, hIMC);
}
return CScrollView::WindowProc(message, wParam, lParam);
}
我想再问一下如果我在WM_IME_ENDCOMPOSITION中处理了字符串
我怎么阻止输入法再向程序发送WM_CHAR消息?
在WindowProc里if(message == WM_IME_ENDCOMPOSITION)
{
HIMC hIMC = ImmGetContext(this->m_hWnd);
m_nIMECharLeft = m_nIMECharSize = ImmGetCompositionString(hIMC, GCS_RESULTSTR, 0, 0);
ImmReleaseContext(this->m_hWnd, hIMC);
}在OnChar里 if(m_nIMECharSize == 0)
DoInputChar(nChar);
else
{
m_nIMECharLeft -= 2;
if(m_nIMECharLeft == 0)
{
HIMC hIMC = ImmGetContext(this->m_hWnd);
WCHAR pBuf[1000]= {0};
DWORD dwSize = ImmGetCompositionString(hIMC, GCS_RESULTSTR, pBuf, 1000);
ImmReleaseContext(this->m_hWnd, hIMC);
DoInputString(pBuf);
m_nIMECharSize = 0;
}
}