自定义一个CMyEdit类派生自 CEdit控件,在其中添加响应OnMouseMove事件(其中要访问对话框中别的成员);在对话框中动态创建这样的控件。
  我的方法如下:
void CMyEdit::OnMouseMove(UINT nFlags, CPoint point) 
{
         HWND cwndCur = ::GetParent(m_hWnd);//获得对话框的句柄
CAddressDialog *dialog = new CAddressDialog;
dialog->Attach(cwndCur);//把dialog对象同当前使用的对话框联系起来
dialog->m_Pointer = _T("Mouse is in");//访问对话框中的成员
dialog->UpdateData(false);
}
现在的问题是:在运行时,当触发CMyEdit::OnMouseMove事件时产生异常。
调试发现产生在dialog->Attach(cwndCur)语句。
高手给点意见!!

解决方案 »

  1.   

    void CMyEdit::OnMouseMove(UINT nFlags, CPoint point)
    {
    CWnd* cwndCur = this->GetParent();
    CtesttopDlg *dialog = (CtesttopDlg*)cwndCur;//*/new CtesttopDlg;
    //dialog->Attach(cwndCur->GetSafeHwnd());
    dialog->m_Pointer = _T("Mouse is in");
    AfxMessageBox(dialog->m_Pointer);
    dialog->UpdateData(false); CEdit::OnMouseMove(nFlags, point);
    }
      

  2.   

    to  yifengling0(逸枫) :这样的改变有何区别?为什么?
    按照你的办法,运行到dialog->m_Pointer = _T("Mouse is in");语句时就会弹出异常!!(内存不可读)这是什么原因?
      

  3.   

    m_Pointer 你的是什么指针?我用的是CString m_Pointer
      

  4.   

    m_Pointer是对话框中的一个CString成员变量,与CStatic控件关联,为的是当鼠标在CMyEdit控件区域中时在CStatic控件中显示文本:Mouse is in
      

  5.   

    你在OnMouseMove中创建一大对对象,什么时候释放呢?
      

  6.   

    自定义控件的mousemove事件
    void CMyEdit::OnMouseMove(UINT nFlags, CPoint point) 
    {
        CAddressDialog *dialog = (CAddressDialog*)::GetParent(this->m_hWnd);
        dialog->m_Pointer = _T("Mouse is in");
        dialog->UpdateData(false);
        CEdit::OnMouseMove(nFlags, point);
    }
    ///////////CAddressDialog中的定义主要部分
    void CAddressDialog::DoDataExchange(CDataExchange* pDX)
    {
    CDialog::DoDataExchange(pDX);
    //{{AFX_DATA_MAP(CAddressDialog)
    DDX_Text(pDX, IDC_POINTER_STATIC, m_Pointer);
    //m_Pointer与static控件关联
    //}}AFX_DATA_MAP
    }BEGIN_MESSAGE_MAP(CAddressDialog, CDialog)
    //{{AFX_MSG_MAP(CAddressDialog)
    ON_WM_CREATE()
    ON_WM_MOUSEMOVE()
    //}}AFX_MSG_MAP
    END_MESSAGE_MAP()/////////////////////////////////////////////////////////////////////////////
    // CAddressDialog message handlersint CAddressDialog::OnCreate(LPCREATESTRUCT lpCreateStruct) 
    {
    if (CDialog::OnCreate(lpCreateStruct) == -1)
    return -1;

    // TODO: Add your specialized creation code here
    m_Edit.Create(ES_MULTILINE | WS_CHILD | WS_VISIBLE | WS_TABSTOP | WS_BORDER,CRect(150, 100, 300, 250), this, 1);
    return 0;
    }
      

  7.   

    m_Edit.Create(ES_MULTILINE | WS_CHILD | WS_VISIBLE | WS_TABSTOP | WS_BORDER,CRect(150, 100, 300, 250), this, 1);把这句话拿到,initdialog的函数中!~就可以了,为什么要这么麻烦的作呢?直接在Dialog上画一下,然后子类化不好么?
      

  8.   

    还有个问题,你想让text显示文本在onmousemove里SetWindowText()不好么?干吗这个麻烦啊?
    DDX_Text(pDX, IDC_POINTER_STATIC, m_Pointer);
    你这句话没有问题么?