主对话框的按钮响应函数是这样的,直接创建更新的子对话框窗口:
void CschunkDlg::OnBnClickedButton1()
{        m_part1Dlg ->Create(IDD_DIALOG_PART1,this);
  m_part1Dlg ->ShowWindow(SW_SHOW);
  m_part1Dlg ->UpdateWindow();     }
你说的主对话框向子对话框发送消息,通知子对话框进行重绘是什么意思啊?
子对话框的主要绘制程序如下,其中psch指针是调用主对话框的绘制的函数,修改了该函数的参数,实现细节放大:
void part2Dlg::OnPaint()
{
if (IsIconic())
{
CPaintDC dc(this); // 用于绘制的设备上下文
SendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM>(dc.GetSafeHdc()), 0);
// 使图标在工作区矩形中居中;
int cxIcon = GetSystemMetrics(SM_CXICON);
int cyIcon = GetSystemMetrics(SM_CYICON);
CRect rect;
GetClientRect(&rect);
int x = (rect.Width() - cxIcon + 1) / 2;
int y = (rect.Height() - cyIcon + 1) / 2;
// 绘制图标
dc.DrawIcon(x, y, m_hIcon);
}
else
{
psch->RenderScene(0.0,0.0,1.0,0.0,0.0,0.0,0.0,1.0,0.0);
SwapBuffers(hrenderDC);
CDialog::OnPaint();
}
}

解决方案 »

  1.   

    对非模态对话框,那怎么可能会没动作,是你的逻辑有问题吧:参数设置完毕(某个按钮的click):
    {
    主窗口.Invalidate();
    局部放大窗口.Invalidate();
    }即可,不要去在OnPaint中去发送什么WM_ICONERASEBKGND之类的消息
      

  2.   

    我现在发现问题的所在了,在子对话框程序里BOOL part2Dlg::OnInitDialog()中,我加入了下面两行代码,把这两行代码删掉主对话框就可以刷新了,可是这两行代码是有关子对话框的图片控件的,删了就无法显示图片了,请教一下怎么修改这两行代码?谢谢。
            CWnd *wnd=GetDlgItem(IDC_PART2MODEL);
    hrenderDC=::GetDC(wnd->m_hWnd);