F1,F2……这些按键的事件是由那个消息产生? 试过了,在里面用:if(nChar==VK_F1){MessageBox("");}没有任何反应! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 BOOL CAsdfaDlg::PreTranslateMessage(MSG* pMsg) { // TODO: Add your specialized code here and/or call the base class if(pMsg ->message == WM_KEYDOWN && pMsg ->wParam == VK_F2) AfxMessageBox("adsf"); return CDialog::PreTranslateMessage(pMsg);}响应PreTranslateMessage消息 我想问问楼上的大哥,if(pMsg ->message == WM_KEYDOWN && pMsg ->wParam == VK_F2)该IF语句里的:pMsg ->message == WM_KEYDOWN 起什么作用呢?直接用:if(pMsg ->wParam == VK_F2)作判断不行吗? PreTranslateMessage负责绝大多数的消息,并不是只有WM_KEYDOWN这一个消息,也有可能是别的消息的pMsg ->wParam == VK_F2,你怎么办?当然要判断了。 我想问问楼上的大哥,if(pMsg ->message == WM_KEYDOWN && pMsg ->wParam == VK_F2)该IF语句里的:pMsg ->message == WM_KEYDOWN 起什么作用呢?直接用:if(pMsg ->wParam == VK_F2)作判断不行吗?//--------------------------------判断是否有键盘消息且这个消息是不是是你按的键发出的..不能省.. 我是这样做的,好像也能实现功能BOOL CMainFrame::PreTranslateMessage(MSG* pMsg) { // TODO: Add your specialized code here and/or call the base class switch (pMsg->wParam) { case VK_F1: { MessageBox("我按了F1");// } break; case VK_F2: { MessageBox("我按了F2");// } break; case VK_F3: { MessageBox("我按了F3");// } break; case VK_F4: { MessageBox("我按了F4");// } break; case VK_F5: { MessageBox("我按了F5");// } break; default: break; } return CFrameWnd::PreTranslateMessage(pMsg);}但是我这里发现了一个奇怪的问题,比如我按F1时,会跳出一对话框,也就是说程序执行MessageBox("我按了F1");//但是,无意中按键盘上的Q键时,发系统程序也弹出了一个对话框,即程序也执行MessageBox("我按了F1");//难道按F1和按Q都会产生同样的事件但是我语句里面明明是:switch (pMsg->wParam) { case VK_F1: . .希望各位高手告诉小弟,但里是我上面的语句有问题还是怎么会事,我只希望F1时才产生该事件,按其它键都不能响应。 LZ你就好学一点吧,那么多人已经告诉你答案了,你还有什么好问的?不判断pMsg->message的情况下,可能会有别的消息的这个参数pMsg->wParam满足VK_F1的条件,懂了么?你就不能if(pMsg ->message == WM_KEYDOWN){switch (pMsg->wParam) {…… }} 不判断pMsg->message的情况下,可能会有别的消息的这个参数pMsg->wParam满足VK_F1的条件,懂了么?//----------------------------说了半天,我还是不知道(pMsg ->message == WM_KEYDOWN)的作用,楼上的大哥,你说的这个意思我当然知道,我就是不知道pMsg ->message == WM_KEYDOWN这个语句它屏蔽了那些消息嘛! -_-b,pMsg->message表示收到的消息,WM_KEYDOWN表示键盘按下的消息值。至于==什么意思,我也懒得说了。你要是再看不懂,那以后就不要学编程了…… pMsg ->message == WM_KEYDOWN :消息为键盘按下pMsg->wParam = VK_F2:键盘按下的为F2键两句同时才表示 F1键被按下。 PreTranslateMessage是所有消息都要从那里过的那个pMsg就包含了消息的内容,包括他的类型以及附加数据VK_F1只是一个宏而已,其内容不过是一个普通的数字,完全可能和其他消息的数据相同而导致误判,所以要先判断消息类型是不是KEY_DOWN,消息类型对了,那么里面的数据则有唯一的含义了 谁认识苏华平吗? SetRegistryKey问题 关于多线程共享套接字问题 suspendthread 多个线程, 为什么 resumeThread后 只是开启了最后一个线程? 代码大致如下: 关于TCP断开连接的详细过程疑问 由于E文不过关,那位老大过来帮译一个句子,谢谢! 如何捕获按键? Recordset对象打开的问题。 我们为什么要用COM?它给我们带来了什么?欢迎大家来探讨! 俺是用VC++的,可是俺们领导却弄了一个超过四万行的汇编... 不通过鼠标位置控制窗口控件?? wave语音文件的数字信号的意义???
{
// TODO: Add your specialized code here and/or call the base class
if(pMsg ->message == WM_KEYDOWN && pMsg ->wParam == VK_F2)
AfxMessageBox("adsf");
return CDialog::PreTranslateMessage(pMsg);
}
响应PreTranslateMessage消息
if(pMsg ->message == WM_KEYDOWN && pMsg ->wParam == VK_F2)
该IF语句里的:pMsg ->message == WM_KEYDOWN 起什么作用呢?
直接用:if(pMsg ->wParam == VK_F2)
作判断不行吗?
if(pMsg ->message == WM_KEYDOWN && pMsg ->wParam == VK_F2)
该IF语句里的:pMsg ->message == WM_KEYDOWN 起什么作用呢?
直接用:if(pMsg ->wParam == VK_F2)
作判断不行吗?//--------------------------------
判断是否有键盘消息
且这个消息是不是是你按的键发出的..
不能省..
BOOL CMainFrame::PreTranslateMessage(MSG* pMsg)
{
// TODO: Add your specialized code here and/or call the base class
switch (pMsg->wParam)
{
case VK_F1:
{
MessageBox("我按了F1");//
}
break;
case VK_F2:
{
MessageBox("我按了F2");//
}
break;
case VK_F3:
{
MessageBox("我按了F3");//
}
break;
case VK_F4:
{
MessageBox("我按了F4");//
}
break;
case VK_F5:
{
MessageBox("我按了F5");//
}
break;
default:
break; }
return CFrameWnd::PreTranslateMessage(pMsg);
}但是我这里发现了一个奇怪的问题,比如我按F1时,会跳出一对话框,也就是说程序执行MessageBox("我按了F1");//
但是,无意中按键盘上的Q键时,发系统程序也弹出了一个对话框,即程序也执行
MessageBox("我按了F1");//
难道按F1和按Q都会产生同样的事件
但是我语句里面明明是:
switch (pMsg->wParam)
{
case VK_F1:
.
.
希望各位高手告诉小弟,但里是我上面的语句有问题还是怎么会事,我只希望F1时才产生该事件,按其它键都不能响应。
不判断pMsg->message的情况下,可能会有别的消息的这个参数pMsg->wParam满足VK_F1的条件,懂了么?
你就不能
if(pMsg ->message == WM_KEYDOWN)
{
switch (pMsg->wParam)
{
……
}
}
//----------------------------
说了半天,我还是不知道(pMsg ->message == WM_KEYDOWN)的作用,楼上的大哥,你说的这个意思我当然知道,我就是不知道pMsg ->message == WM_KEYDOWN这个语句它屏蔽了那些消息嘛!
至于==什么意思,我也懒得说了。你要是再看不懂,那以后就不要学编程了……
pMsg->wParam = VK_F2:键盘按下的为F2键两句同时才表示
F1键被按下。
那个pMsg就包含了消息的内容,包括他的类型以及附加数据
VK_F1只是一个宏而已,其内容不过是一个普通的数字,完全可能和其他消息的数据相同而导致误判,所以要先判断消息类型是不是KEY_DOWN,消息类型对了,那么里面的数据则有唯一的含义了