我在对话框中有五个按钮,分别实现不同的功能。
我想除了可以用鼠标点击这五个按钮外,还可以用键盘的上下左右键控制。现在我可以用键盘控制了,但出现一个问题,就是对话框上的所有按钮都不能用鼠标点击实现其功能了。
各位大侠们快帮帮我吧。我实现键盘控制的代码是:
BOOL CRobotControl::PreTranslateMessage(MSG* pMsg)
{
// TODO: Add your specialized code here and/or call the base class this->SetFocus();
if(pMsg->message==WM_KEYDOWN) //截获上下左右键的消息
{
switch(pMsg->wParam)
{
case VK_LEFT:
OnLeft();
break;
case VK_RIGHT:
OnRight();
break;
case VK_UP:
OnUp();
break;
case VK_DOWN:
OnDown();
break;
case VK_SPACE:
OnStop();
break;
}
}
return CDialog::PreTranslateMessage(pMsg);
}
在此先谢过了!
我想除了可以用鼠标点击这五个按钮外,还可以用键盘的上下左右键控制。现在我可以用键盘控制了,但出现一个问题,就是对话框上的所有按钮都不能用鼠标点击实现其功能了。
各位大侠们快帮帮我吧。我实现键盘控制的代码是:
BOOL CRobotControl::PreTranslateMessage(MSG* pMsg)
{
// TODO: Add your specialized code here and/or call the base class this->SetFocus();
if(pMsg->message==WM_KEYDOWN) //截获上下左右键的消息
{
switch(pMsg->wParam)
{
case VK_LEFT:
OnLeft();
break;
case VK_RIGHT:
OnRight();
break;
case VK_UP:
OnUp();
break;
case VK_DOWN:
OnDown();
break;
case VK_SPACE:
OnStop();
break;
}
}
return CDialog::PreTranslateMessage(pMsg);
}
在此先谢过了!
,为什么返回的确是CDialog::PreTranslateMessage(pMsg); 呢?我直接重写虚函数:我的代码如下,没问题。void CAppDemoDlg::OnLeft()
{
// TODO: Add your control notification handler code here
MessageBox("Test Good!");
}BOOL CAppDemoDlg::PreTranslateMessage(MSG* pMsg)
{
// TODO: Add your specialized code here and/or call the base class
switch(pMsg->wParam)
{
case VK_LEFT:
OnLeft();
break;
}
return CDialog::PreTranslateMessage(pMsg);
}
if(pMsg->message == WM_LBUTTONDOWN )
{
MessageBox("你点了鼠标!");
}
在不同的地方加上,看这里能捕捉到鼠标消息不。如果能捉到,你 又没有return ture说明问题不在这里。
不会呀
我测试过
如果加this->SetFocus(); 鼠标就失效了
去掉后键盘消息照样可以接获到的
我想除了可以用鼠标点击这五个按钮外,还可以用键盘的上下左右键控制。现在我可以用键盘控制了,但出现一个问题,就是对话框上的所有按钮都不能用鼠标点击实现其功能了。
各位大侠们快帮帮我吧。 我实现键盘控制的代码是:
BOOL CRobotControl::PreTranslateMessage(MSG* pMsg)
{
// TODO: Add your specialized code here and/or call the base class // this->SetFocus(); // 多余
if(pMsg->message==WM_KEYDOWN) //截获上下左右键的消息
{
switch(pMsg->wParam)
{
case VK_LEFT:
OnLeft();
return TRUE;
break;
case VK_RIGHT:
OnRight();
return TRUE;
break;
case VK_UP:
OnUp();
return TRUE;
break;
case VK_DOWN:
OnDown();
return TRUE;
break;
case VK_SPACE:
OnStop();
return TRUE;
break; }
}
return CDialog::PreTranslateMessage(pMsg);
}
在此先谢过了!
CRobotControl不是主对话框。
我试过了,不行。
this->SetFocus(); 如果去掉这句话,根本获取不到键盘消息。