主对话框的按钮响应函数是这样的,直接创建更新的子对话框窗口:
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();
}
}
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();
}
}
{
主窗口.Invalidate();
局部放大窗口.Invalidate();
}即可,不要去在OnPaint中去发送什么WM_ICONERASEBKGND之类的消息
CWnd *wnd=GetDlgItem(IDC_PART2MODEL);
hrenderDC=::GetDC(wnd->m_hWnd);