if (pMsg->message==WM_KEYUP && pMsg->wParam==VK_RETURN) //截取回车键
{ keybd_event( VK_SPACE,
                      0x45,                     
KEYEVENTF_EXTENDEDKEY | 0,
                      0 );  
//         if(pMsg->message==WM_KEYUP && pMsg->wParam==VK_RETURN )
//  {
    
// Simulate a key press         
     
// Simulate a key release
 keybd_event( VK_SPACE,                      
          0x45,
                      KEYEVENTF_EXTENDEDKEY | KEYEVENTF_KEYUP,
                      0);  }
我发现我没有屏蔽掉enter键,系统还是发拉enter,我不想发它,我只想发SPACE
该怎么办???
谢谢拉!!

解决方案 »

  1.   

    if ((pMsg->message==WM_KEYUP||pMsg->message==WM_KEYDOWN) && pMsg->wParam==VK_RETURN)
      

  2.   

    还是不停的 发!
    我这么做是不是既发拉enter又发拉space??
      

  3.   

    BOOL CCXXX::PreTranslateMessage(MSG* pMsg) 
    {
        if(pMsg->message == WM_KEYDOWN)
        {
            switch(pMsg->wParam)
            {
            case VK_RETURN://屏蔽回车
                return TRUE;
            case VK_ESCAPE://屏蔽Esc
                return TRUE;
            }
        }
        return CDialog::PreTranslateMessage(pMsg);

      

  4.   

    to  cbc(逍遥子) 
    你这种是可以蔽回车,但是怎样发送space列???
      

  5.   

    TO:cbc(逍遥子)
    -----------------------
    我也有这样方面的疑惑,你说的很好,确实我屏蔽掉了Enter,和ESC,但是问题也出来了。
    问题是我在这个对话框中又包含了另外一对话框,我的意思是指,后者没有边框,是前者的子窗体,在里面随便放置一些控件。这样做是有必要的,因为打算放在主对话窗体中的控件实在很多,而且还得分类。在两个对话中分别重载PreTranslateMessage,发现自对话窗口不执行该函数,当按下ESC或者Enter键之后,子对话窗口消失。
      

  6.   

    若发送space?
    BOOL CCXXX::PreTranslateMessage(MSG* pMsg) 
    {
        if(pMsg->message == WM_KEYDOWN)
        {
            switch(pMsg->wParam)
            {
            case VK_RETURN://屏蔽回车
                 OnKeyDown(VK_SPACE, LOWORD(pMsg ->lParam), HIWORD(pMsg->lParam)); 
                return TRUE;
            case VK_ESCAPE://屏蔽Esc
                return TRUE;
            }
        }
        return CDialog::PreTranslateMessage(pMsg);
    }
      

  7.   

    对话框嵌套,程序逻辑不用这么复杂的。CStaic m_stcContainer;
    CInterDlg m_dlg;m_dlg.CreateDlg( (CWnd*)&m_stcContainer);
    m_dlg.MoveWindow( &rect );
    m_dlg.ShowWindow( SW_SHOW );
    m_dlg.UpdateWindow();
      

  8.   

    不好意识,1个地方写错了,更正,若发送space?
    BOOL CCXXX::PreTranslateMessage(MSG* pMsg) 
    {
        if(pMsg->message == WM_KEYDOWN)
        {
            switch(pMsg->wParam)
            {
            case VK_RETURN://屏蔽回车
    keybd_event( VK_SPACE,
                          0x45,                     
    KEYEVENTF_EXTENDEDKEY | 0,
                          0 );              return TRUE;
            case VK_ESCAPE://屏蔽Esc
                return TRUE;
            }
        }
        return CDialog::PreTranslateMessage(pMsg);
      

  9.   

    to: njtu_shiyl(玉晶)
    -------------------------
    我现在随着问题很困惑,请参照下面帖子
    http://expert.csdn.net/Expert/topic/1243/1243032.xml?temp=.3507196必定高分相赠。
      

  10.   

    TO  public;我这么搞之后怎么不见space消息??
      

  11.   

    TO  public 还是存在那种情况,不停的发space。我怀疑是我按着enter不放时,系统不停的激活 keybd_event( VK_SPACE,0x45, )。可是我只想激活一次,在按着enter不放的情况下。
      

  12.   

    我说个笨方法,抛砖引玉
    定义个成员变量UINT count,初值为0
    BOOL CCXXX::PreTranslateMessage(MSG* pMsg) 
    {
        if(pMsg->message == WM_KEYDOWN)
        {
            switch(pMsg->wParam)
            {
             case VK_RETURN://屏蔽回车
            {
     if(count<1)
     {
       keybd_event( VK_SPACE,
       0x45,                     
       KEYEVENTF_EXTENDEDKEY | 0,
       0 );  
         count++;
      }
      return true; 
    }
            case VK_ESCAPE://屏蔽Esc
                return TRUE;
            }
        }
        if (pMsg->message==WM_KEYUP)
            {
    if(pMsg->wParam==VK_RETURN)
    count=0;
    }
        return CDialog::PreTranslateMessage(pMsg);
      

  13.   

     if(pMsg->message == WM_KEYDOWN && pMsg->wParam==VK_RETURN)
        {
            
           //屏蔽回车
                

      pMsg->message=WM_KEYDOWN;
     pMsg->wParam=VK_SPACE;
             keybd_event( VK_SPACE,
                          0x45,                     
           KEYEVENTF_EXTENDEDKEY | 0,
                          0 );  
                return TRUE;

    }
    if (pMsg->message == WM_KEYUP && pMsg->wParam==VK_RETURN)
    {
    ASSERT(0!=0);
    keybd_event( VK_SPACE,                      
         0x45,
                          KEYEVENTF_EXTENDEDKEY | KEYEVENTF_KEYUP,
                               0);
             }
    在我的界面上有一个“打开”控键;我在上面按enter时,我把enter的消息屏蔽掉,转发为space,打开open and save as对话框。
       我在debug下运行,我大喜,我搞好拉。可是我在release下就不能打开我的open and save as对话框,当我回到debug下把ASSERT(0!=0)屏蔽掉时,也不能打开open and save as对话框。我真的不知道是为什么。
      

  14.   

    假设你有A、B两个对话框,要把B作为A的子窗口嵌入,则可以在A中定义如下的成员变量:// CADlg.h
    CStatic m_stcContainer; //记得在B的资源里把这个Static放上去,用Classwizard 产生这个变量
    CBDlg m_dlg;... ...// CADlg.cpp
    BOOL CADlg::OnInitDialog() 
    {
    CDialog::OnInitDialog();

    // TODO: Add extra initialization here
    CRect rect;
    m_stcContainer .GetWindowRect( &rect);
    m_stcContainer .ScreenToClient( &rect );
    m_dlg.Create( IDD_B_DLG, (CWnd*)&m_stcContainer );
    m_dlg.MoveWindow( &rect );
    m_dlg.ShowWindow( SW_SHOW );
    m_dlg.UpdateWindow();
             ... ...}
      

  15.   

    to  printer(打印机):z
    这个够了吧?