情况是这样:
我定义了一个CWnd A。里面有两个子窗口B,C。单击C中某个区域时弹出对话框D。
我需要实现这样的功能。当用户在D中修改了数据后。B中的相关内容,例如图形等,自动刷新。我是这样做的,在创建D的时候把B窗口的指针传给D,然后当D捕获到自己当中的控件有变化的时候便调用B中的SendMessage(WM_PAINT);或者是Invalidate()。但是这样做在调用到B中的SendMessage(WM_PAINT);或者是Invalidate()时会出现异常。应该如何解决?或者是应该如何用其他方法实现?

解决方案 »

  1.   

    发送一个自己定义的消息试试,SendMessage(MYPAINT);
      

  2.   

    我写了一下,不会出错。
    void CSendMessageDlg::OnButton() 
    {
    // TODO: Add your control notification handler code here
    CDlg D;
    D.pdlgMain = this;    //看看是不是你的这个地方没有赋值?
    D.DoModal();

    }
    ...class CDlg : public CDialog
    {
    // Construction
    public:
    CSendMessageDlg *pdlgMain;
    CDlg(CWnd* pParent = NULL);   // standard constructor
    ...void CDlg::OnSend() 
    {
    // TODO: Add your control notification handler code here
    ::SendMessage(pdlgMain->m_hWnd, WM_PAINT, 0, 0);

    }
      

  3.   

    void CDlg::OnSend() 
    {
    // TODO: Add your control notification handler code here
    //::SendMessage(pdlgMain->m_hWnd, WM_PAINT, 0, 0);
    pdlgMain->SendMessage(WM_PAINT);

    }
    这样也没有问题。
      

  4.   

    To zhouyong0371
    我是传了B窗口的指针给D,不是传C的。
      

  5.   

    To zhouyong0371
    我的指针搞错了。现在搞好了。
    thanks