vc中的文本框默认情况下是没有click事件的
现在我想要这个事件处理一些事,该怎么办?
麻烦叙述详细一点

解决方案 »

  1.   

    从CEdit派生一个新类CMyEdit,用classwizard为它的WM_LBUTTONDOWN添加消息处理函数。然后给你的文本框添加一个control类型的变量,指定类名为CMyEidt就可以了。
      

  2.   

    在类cmyedit中的cmyedit.cpp中编写其wm_lbuttondown消息处理函数,
    如果在这个处理函数中想操作别的窗体上的控件,该怎么办?
    我曾经有如下这样做过,但是不行,请看一下哪里有问题。
    CAdlg(一个对话框类)其上有二个文本框(别为m_edit1,m_edit2),文本框继承了cmyedit类(cedit的扩展类),在cmyedit中的wm_lbuttondown处理函数中我写下如上程序:
      CAdlg cad;
        cad.m_edit1="12345";(给别的窗体上的文本框赋值)
      cad.updatedata(TRUE);(在实际运行时,这里会出错。编译连接时都通过)
    不知道是什么原因?
      

  3.   

    CAdlg* pParent=(CAdlg*)GetParent();
    pParent->m_edit1="12345";
    pParent->UpdataData(false);
      

  4.   

    谢谢上面webber84的指点,可以更新数据。
    我再问一下,上面cadlg窗体中的两个文本框m_edit1和m_edit2,
    它们俩的wm_lbuttondown事件是同一个处理程序,
    在cmyedit.cpp中的处理程序中怎么判断wm_lbuttondown消息是来自
    m_edit1还是m_edit2 ? 因为我想要不同的文本框的消息处理不同的事,
    该怎么办呢?
      

  5.   

    你分别为它们建一个类,加上不同的OnLButtonDown不就行了吗。
      

  6.   

    从CEdit派生一个类,响应鼠标消息
      

  7.   

    不用派生什么类啦,用setwindowlong搞到edit控件的wndproc,所有的消息就都可以自己处理啦,咔咔。 :)
      

  8.   

    我是刚学vc,请cloud_soft说清楚一点,怎么用setwindowlong搞到edit控件的wndproc?最好能写一段代码,谢谢!
      

  9.   

    记住了哦:PreTranslateMessage()是截获一切消息的虚函数(在正常的消息传递之前)所以重载你对话框的PreTranslateMessage函数即可,比如:
    BOOL CYourDialog::PreTranslateMessage(MSG* pMsg) 
    {
       if(pMsg->message==WM_LBUTTONDOWN)
          {
             if(GetDlgItem(IDC_EDIT1)->m_hWnd==pMsg->hwnd)
                 MessageBox("you click IDC_EDIT1");
             if(GetDlgItem(IDC_EDIT2)->m_hWnd==pMsg->hwnd)
                 MessageBox("you click IDC_EDIT2");
             //....
          }
       return CDialog::PreTranslateMessage(pMsg);
    }