试过了,在里面用:
if(nChar==VK_F1)
{
MessageBox("");
}
没有任何反应!

解决方案 »

  1.   

    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消息
      

  2.   

    我想问问楼上的大哥,
    if(pMsg ->message == WM_KEYDOWN && pMsg ->wParam == VK_F2)
    该IF语句里的:pMsg ->message == WM_KEYDOWN 起什么作用呢?
    直接用:if(pMsg ->wParam == VK_F2)
    作判断不行吗?
      

  3.   

    PreTranslateMessage负责绝大多数的消息,并不是只有WM_KEYDOWN这一个消息,也有可能是别的消息的pMsg ->wParam == VK_F2,你怎么办?当然要判断了。
      

  4.   

    我想问问楼上的大哥,
    if(pMsg ->message == WM_KEYDOWN && pMsg ->wParam == VK_F2)
    该IF语句里的:pMsg ->message == WM_KEYDOWN 起什么作用呢?
    直接用:if(pMsg ->wParam == VK_F2)
    作判断不行吗?//--------------------------------
    判断是否有键盘消息
    且这个消息是不是是你按的键发出的..
    不能省..
      

  5.   

    我是这样做的,好像也能实现功能
    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时才产生该事件,按其它键都不能响应。
      

  6.   

    LZ你就好学一点吧,那么多人已经告诉你答案了,你还有什么好问的?
    不判断pMsg->message的情况下,可能会有别的消息的这个参数pMsg->wParam满足VK_F1的条件,懂了么?
    你就不能
    if(pMsg ->message == WM_KEYDOWN)
    {
    switch   (pMsg->wParam) 
    {
    …… 
    }

      

  7.   

    不判断pMsg->message的情况下,可能会有别的消息的这个参数pMsg->wParam满足VK_F1的条件,懂了么?
    //----------------------------
    说了半天,我还是不知道(pMsg ->message == WM_KEYDOWN)的作用,楼上的大哥,你说的这个意思我当然知道,我就是不知道pMsg ->message == WM_KEYDOWN这个语句它屏蔽了那些消息嘛!
      

  8.   

    -_-b,pMsg->message表示收到的消息,WM_KEYDOWN表示键盘按下的消息值。
    至于==什么意思,我也懒得说了。你要是再看不懂,那以后就不要学编程了……
      

  9.   

    pMsg ->message == WM_KEYDOWN :消息为键盘按下
    pMsg->wParam = VK_F2:键盘按下的为F2键两句同时才表示
      F1键被按下。
      

  10.   

    PreTranslateMessage是所有消息都要从那里过的
    那个pMsg就包含了消息的内容,包括他的类型以及附加数据
    VK_F1只是一个宏而已,其内容不过是一个普通的数字,完全可能和其他消息的数据相同而导致误判,所以要先判断消息类型是不是KEY_DOWN,消息类型对了,那么里面的数据则有唯一的含义了