很多人说重载PreTranslateMessag,加入
SendMessage(pMsg->message,pMsg->wParam,pMsg->lParam);
return 0;
但是这样一来我写的界面出现了很多问题,想问问有没有其他办法,响应onchar,或者其他方法响应键盘消息。
我现在用的是VS2010写的是打字测速软件,如果有基于对话框的源码就更好了,谢谢了!!
现在可以响应消息了,但是我又遇到一个问题,怎么对比CString,我把一篇文章定义在一个CString中,当我输入的字符定义在另一个CString中,如何在输入的时候一个一个对比,正确才输出呢?
追答CString类不是有一个Find的函数么,你可以用它去查找啊,好像是找到就返回字符串的初始索引,找不到就返回-1.你可以去查看哈。 如果有什么事要及时回答你的话可以加我QQ,因为我这几天有点忙,可能不能查考百度知道信息。976727509
不是,我是直接显示在对话框中的,现在重载了PreTranslateMessag,可以打字了,但是当我按开始按钮后无法打字了,是不是消息之间的冲突?不晓得怎么解决
追答你点击开始按钮后,焦点跑到按钮上去了。所以你的窗口没有接收到WM_CHAR的消息。
当点击完按钮后,将焦点重新设置到窗口上试试。
能详细说说怎么做么,我才学的- -,不懂怎么设置焦点。
追答试试下面这段代码,设置或者取消焦点的,当点击开始后,重设窗口焦点。
void SetFocus(BOOL bFocus = TRUE)
{
if(bFocus)
{
::PostMessage(m_hWnd,WM_SETFOCUS, (WPARAM)m_hWnd, 0);
::PostMessage(m_hWnd,WM_ACTIVATE, WA_ACTIVE, 0);
}
else
{
::PostMessage(m_hWnd,WM_KILLFOCUS, 0, 0);
}
}
试试下面这段代码,设置或者取消焦点的,当点击开始后,重设窗口焦点。
void SetFocus(BOOL bFocus = TRUE)
{
if(bFocus)
{
::PostMessage(m_hWnd,WM_SETFOCUS, (WPARAM)m_hWnd, 0);
::PostMessage(m_hWnd,WM_ACTIVATE, WA_ACTIVE, 0);
}
else
{
::PostMessage(m_hWnd,WM_KILLFOCUS, 0, 0);
}
}
声明m_hWnd成什么?
追答m_hWnd是你当前所在窗口的窗口句柄。在窗口类中可以写成this->m_hWnd。
追问我没有弄得那么复杂··我就在点击按钮的函数里面添加了SetFocus () ;,就把输入焦点交给主对话框了。
追答那你添加我给你的那个函数到窗口程序中,当点击按钮时,就用SetFocus试试。看看是不是焦点的问题。
本回答被提问者采纳