on_char消息如何响应?

长尾巴的悟空 2006-09-01 03:03:55
在View类中,定义一个WM_CHAR消息,
则代码为:
void CCirclemoveView::OnChar(UINT nChar, UINT nRepCnt, UINT nFlags)
{
// TODO: Add your message handler code here and/or call default
//CClientDC dc(this);

if(nChar==VK_LEFT)
{
MessageBox("you");

}
CView::OnChar(nChar, nRepCnt, nFlags);
}
但是程序响应不到这个函数,怎么回事,怎么解决?
...全文
310 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
longbeibei 2006-09-02
  • 打赏
  • 举报
回复
呵呵 初学阶段
请多指教
菜牛 2006-09-01
  • 打赏
  • 举报
回复
楼主这个牛角尖转得太深了。
longbeibei 2006-09-01
  • 打赏
  • 举报
回复
必须把WM_KEYDOWN或者WM_CHAR
send过去
否则无法捕捉到
longbeibei 2006-09-01
  • 打赏
  • 举报
回复
::PreTranslateMessage(MSG* pMsg)
添加
if( pMsg->message == WM_KEYDOWN )
{
return SendMessage( WM_KEYDOWN, pMsg->wParam, pMsg->lParam ); //
}
或者
if( pMsg->message == WM_CHAR )
{
return SendMessage( WM_CHAR, pMsg->wParam, pMsg->lParam );
}
Jimmy_Xia 2006-09-01
  • 打赏
  • 举报
回复
ON_WM_KEYDOWN
用这个消息
Torch009 2006-09-01
  • 打赏
  • 举报
回复
OnChar 抓不到 VK_LEFT呀
mzyrf 2006-09-01
  • 打赏
  • 举报
回复
呵呵
长尾巴的悟空 2006-09-01
  • 打赏
  • 举报
回复
oh,yes!谢了,终于彻底明白了.
以后不会再犯这个错误了!
mzyrf 2006-09-01
  • 打赏
  • 举报
回复
WM_KEYDOWN消息是有键按下就响应,所以,只要你按键了就响应OnKeyDown()函数。
而WM_CHAR消息是按键字符信息消息,VK_LEFT左键是字符吗?你按ABCD....字符,例如你将你的函数改了,你按键盘a键,看有没有响应:
void CCirclemoveView::OnChar(UINT nChar, UINT nRepCnt, UINT nFlags)
{
// TODO: Add your message handler code here and/or call default

if(nChar=='a')/////改这
{
MessageBox("The key is a");

}
CView::OnChar(nChar, nRepCnt, nFlags);
}//
长尾巴的悟空 2006-09-01
  • 打赏
  • 举报
回复
如果添加的是WM_KEYDOWN函数
则必然是可以访问得到的,问题是我要如何响应WM_CHAR消息.
void CCirclemoveView::OnChar(UINT nChar, UINT nRepCnt, UINT nFlags)
{
// TODO: Add your message handler code here and/or call default

if(nChar==VK_LEFT)
{
MessageBox("The key is left");

}
CView::OnChar(nChar, nRepCnt, nFlags);
}//程序根本到不了这个函数

void CCirclemoveView::OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags)
{
// TODO: Add your message handler code here and/or call default
if(nChar==VK_LEFT)
{
MessageBox("The key is left");

}
CView::OnKeyDown(nChar, nRepCnt, nFlags);
}//必然可访问得到此函数

同志们哪,问题还不明白吗?我是想知道如何响应得到char消息啊,此函数Debug无法进入,执行不到!
mzyrf 2006-09-01
  • 打赏
  • 举报
回复
用户按下键盘并松开的过程中,将至少产生3条消息:WM_KEYDOWN,WM_CHAR,WM_KEYUP。
其中最重要的是WM_CHAR消息,其消息处理函数是
afx_msg void OnChar(UNIT nChar, UINT nRepCnt, UINT nFlags);

参数nChar包含了按键字符的ASCII值;
参数nRepCnt记录了用户按下键重复的次数;
参数nFlags是一个标志,该标志包含了扫描码等。

具体用法见MSDN
思危 2006-09-01
  • 打赏
  • 举报
回复
OnChar 抓不到 VK_LEFT 倒是正常
思危 2006-09-01
  • 打赏
  • 举报
回复
你是用向导添加的?

消息映射表里有 ON_WM_CHAR()?如果是这样就奇怪了。
star119119 2006-09-01
  • 打赏
  • 举报
回复
OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags)

ON_WM_KEYDOWN() //复写这个消息处理
长尾巴的悟空 2006-09-01
  • 打赏
  • 举报
回复
先抛开里面的代码不说,关键问题是程序根本不响应这个函数呀.
定义这个函数的目的,显然是想能访问得到这个函数.
好像在外面可以定义别的函数来访问此函数是吗?
xlander 2006-09-01
  • 打赏
  • 举报
回复
VK_LEFT不能用OnChar

OnChar响应字符
xlzxlich 2006-09-01
  • 打赏
  • 举报
回复
BOOL CCirclemoveView::PreTranslateMessage(MSG* pMsg)
{
// TODO: Add your specialized code here and/or call the base class
if(pMsg->wParam==VK_LEFT)
{
MessageBox("you");

}

return CView::PreTranslateMessage(pMsg);
}
长尾巴的悟空 2006-09-01
  • 打赏
  • 举报
回复
当然是响应键盘消息了,可是按了我所设置的键,无反应!
Debug进入,根本就无法进入这个函数中.
xlzxlich 2006-09-01
  • 打赏
  • 举报
回复
void CCirclemoveView::OnChar(UINT nChar, UINT nRepCnt, UINT nFlags)
{
// TODO: Add your message handler code here and/or call default
//CClientDC dc(this);

if(nChar=='A')
{
MessageBox("you");

}
CView::OnChar(nChar, nRepCnt, nFlags);
}
zhihong123 2006-09-01
  • 打赏
  • 举报
回复
你要实现什么功能?如果说对控件响应这个消息的话,需要对控件类重写这个消息;

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧