有,CEdit也是窗口,只要是窗口就会有这个消息

解决方案 »

  1.   

    你自己给EDIT控件加这个函数啊
    用Ctrl+w掉出向导
    给EDIT加一个处理WM_KEYDOWN的函数
      

  2.   

    从CEdit派生一个类,加入对WM_KEYDOWN的处理。
      

  3.   

    delphi和visual c++ 是两种不同的编程工具,编程思想和方法肯定会用不同
    的地方。在VC中,是响应消息,可以在MFC ClassWizard对话框里找到。
        对控件来说,可以响应BN_CLICKED 和BN_DOUBLECLIEKED消息。菜单是响应
    COMMAND命令。CView 和CMainFrame等类是响应WM_KEYDOWN 和WM_KEYUP消息。
      

  4.   

    谢谢各位了,我明天回公司试一下,做程序做到我的程度算是够失败的了都快两年了,就会delphi,而且电脑都自己买不起
      

  5.   

    是不是要对CEDIT子类化,我不明白,即然CEDIT是继承的是CWND,即然CWND有什么keydown,mousedown事件,为什么子类没直接就有呢,还要什么子类呢
      

  6.   

    vc得控件使用和delphi不太一样。要找vc得介绍mfc得书和例子
      

  7.   

    我打开了MFC向导,CEDIT就是没有这些keydown事件。
    对了,如果VC没这些事件肯定是不行的,像我经常在编辑框的回车事件中处理一些事情,哪VC岂不没法实现了吗?
      

  8.   

    在用ctrl+w调出向导时为其定义类型为控件型就可以看到相应的事件和方法定义了
      

  9.   

    WM_KEYDOWN事件发生后,系统会自动调用EDIT的DefaultWndProc去执行。系统不会讲这个事件发到主线程。如果你需要这个消息,请安如下方法即可
    原理是安装一个钩子去截获该消息。定义钩子HHOOK hhkTemp;
    设置钩子
    hhkTemp=SetWindowsHookEx(
    WH_KEYBOARD,
    &KeyboardProc,
    GetModuleHandle(NULL),
    GetCurrentThreadId());
    在不需要该事件的时候
    UnhookWindowsHookEx(hhkTemp);
    KeyboradProc的代码如下
    LRESULT CALLBACK KeyboardProc(
      int code,       // hook code
      WPARAM wParam,  // virtual-key code
      LPARAM lParam   // keystroke-message information
    )
    {
    if(code<0)
    {
    return(CallNextHookEx(hhkTemp,code,wParam,lParam));
    }
    else
    {
    HWND hWndTemp=GetFocus();
    if(hEdit==hWndTemp)//self message,hEdit是你需要获得WM_KEYDOWN的那个EDIT控件的句柄
    {
       ...就是它。写入你的代码
    }
    return(0);
    }
    }
    把钩子去掉
      

  10.   

    重載PreTranslateMessage函數:
    下面代碼只讓CEdit接受輸入0~9的數字
    BOOL CxxxDlg::PreTranslateMessage(MSG* pMsg) 
    {
      // TODO: Add your specialized code here and/or call the base class
      if(pMsg->hwnd==CEdit控件變量.GetSafeHwnd ()){
       if(pMsg->message ==WM_KEYDOWN)
        {
          if (pMsg->wParam<'0' || pMsg->wParam >'9') pMsg->wParam =0;
         }
      }
      return CDialog::PreTranslateMessage(pMsg);
    }
      

  11.   


    void CMyEdit::OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags) 
    {
        //do sth;
         CEdit::OnKeyDown(nChar, nRepCnt, nFlags);
    }
      

  12.   

    不会吧,这可是微软的重型武器,一个简单的事件居然这么复杂,在DELPHI中拦截消息太简单了。
    仅仅需要在凼数声明的地方加上 message;wm_keydown 就可以了。
      

  13.   

    自己从CEdit派生一个CMyEdit类,在ClassView中选中CMyEdit类,按右键,
    选“Add Windows Message Handler”。在Filter for Messages avaiable to 中选"Windows"再在左边的New Windows Message/Event中选WM_KEYDOWN
    即可加如该消息处理函数。自己编写之。然后通过ClassWizard将这个CMyEdit
    类和你使用的控件绑定起来即可。
      

  14.   

    通过ClassWizard将这个CMyEdit类和你使用的控件绑定起来即可。
    通过ClassWizard将这个CMyEdit类和你使用的控件绑定起来即可。这一步我上班的时候偷偷试了一下,还没试出来,我已经成功添加了类,而且赋了我期望的ID(IDC_EDIT1),但运行时事件没有产生