情况是这样:
我定义了一个CWnd A。里面有两个子窗口B,C。单击C中某个区域时弹出对话框D。
我需要实现这样的功能。当用户在D中修改了数据后。B中的相关内容,例如图形等,自动刷新。我是这样做的,在创建D的时候把B窗口的指针传给D,然后当D捕获到自己当中的控件有变化的时候便调用B中的SendMessage(WM_PAINT);或者是Invalidate()。但是这样做在调用到B中的SendMessage(WM_PAINT);或者是Invalidate()时会出现异常。应该如何解决?或者是应该如何用其他方法实现?
我定义了一个CWnd A。里面有两个子窗口B,C。单击C中某个区域时弹出对话框D。
我需要实现这样的功能。当用户在D中修改了数据后。B中的相关内容,例如图形等,自动刷新。我是这样做的,在创建D的时候把B窗口的指针传给D,然后当D捕获到自己当中的控件有变化的时候便调用B中的SendMessage(WM_PAINT);或者是Invalidate()。但是这样做在调用到B中的SendMessage(WM_PAINT);或者是Invalidate()时会出现异常。应该如何解决?或者是应该如何用其他方法实现?
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);
}
{
// TODO: Add your control notification handler code here
//::SendMessage(pdlgMain->m_hWnd, WM_PAINT, 0, 0);
pdlgMain->SendMessage(WM_PAINT);
}
这样也没有问题。
我是传了B窗口的指针给D,不是传C的。
我的指针搞错了。现在搞好了。
thanks