我创建了两个对话框(CCalDlg和ShowDlg),并实现CCalDlg对ShowDlg的无模式调用.其中在ShowDlg定义了一个对象CObArray myPtArray; 在CCalDlg的成员变量中,有一个ShowDlg类的对象 ShowDlg g_pDlgModeless;
下面是实现部分:
//CCalDlg.cpp
void CCalDlg::OnBtnCal2()
{
... ... CPoint thePoint;//这是我想存入的点的值
for (i=0;i<=400;i++)
{
draw_y=200-i;
draw_x=m_N2/m_N1*draw_y-1./m_N1*result_x0;
thePoint.x=(int)draw_x; //未提及的变量都于前面实现,这里不作考虑
thePoint.y=(int)draw_y;
g_pDlgModeless.myPtArray.Add((CObject *)&thePoint);
}
if(IDOK==theDlg.DoModal())
{
if (NULL== g_pDlgModeless.GetSafeHwnd())
{
if (g_pDlgModeless.Create(ShowDlg::IDD,this))
{
g_pDlgModeless.ShowWindow(SW_SHOW);
}
}
else
g_pDlgModeless.ShowWindow(SW_SHOW);
}
}
//
void ShowDlg::OnPaint()
{
CPaintDC dc(this); // device context for painting
// TODO: Add your message handler code here CPoint *thePoint=NULL;
thePoint=(CPoint *)myPtArray.GetAt(0); dc.MoveTo(thePoint->x,thePoint->y);
for (int i=0;i<=myPtArray.GetSize();i++)
{
thePoint=(CPoint *)myPtArray.GetAt(i);
dc.LineTo(thePoint->x,thePoint->y);
}
// Do not call CDialog::OnPaint() for painting messages
}
(这里还想问一下,是不是ShowDlg::OnPaint()里的// Do not call CDialog::OnPaint() for painting messages这一句话的缘故? 那我确实想给对话框发送消息让它画图,请问有什么办法?)
下面是实现部分:
//CCalDlg.cpp
void CCalDlg::OnBtnCal2()
{
... ... CPoint thePoint;//这是我想存入的点的值
for (i=0;i<=400;i++)
{
draw_y=200-i;
draw_x=m_N2/m_N1*draw_y-1./m_N1*result_x0;
thePoint.x=(int)draw_x; //未提及的变量都于前面实现,这里不作考虑
thePoint.y=(int)draw_y;
g_pDlgModeless.myPtArray.Add((CObject *)&thePoint);
}
if(IDOK==theDlg.DoModal())
{
if (NULL== g_pDlgModeless.GetSafeHwnd())
{
if (g_pDlgModeless.Create(ShowDlg::IDD,this))
{
g_pDlgModeless.ShowWindow(SW_SHOW);
}
}
else
g_pDlgModeless.ShowWindow(SW_SHOW);
}
}
//
void ShowDlg::OnPaint()
{
CPaintDC dc(this); // device context for painting
// TODO: Add your message handler code here CPoint *thePoint=NULL;
thePoint=(CPoint *)myPtArray.GetAt(0); dc.MoveTo(thePoint->x,thePoint->y);
for (int i=0;i<=myPtArray.GetSize();i++)
{
thePoint=(CPoint *)myPtArray.GetAt(i);
dc.LineTo(thePoint->x,thePoint->y);
}
// Do not call CDialog::OnPaint() for painting messages
}
(这里还想问一下,是不是ShowDlg::OnPaint()里的// Do not call CDialog::OnPaint() for painting messages这一句话的缘故? 那我确实想给对话框发送消息让它画图,请问有什么办法?)
if(IDOK==theDlg.DoModal())这里theDlg是什么?向导生成的代码不是这样子的吧,你在向导生成的代码else部分绘图就行了。
if(IDOK==theDlg.DoModal())是为了防止"="错误,如果是"if(theDlg.DoModal()=IDOK)",编译器不会报错,但这确实是个逻辑错误,而若是if(IDOK=theDlg.DoModal()),编译器就会帮助检错.多谢 Mackz提醒,我一直都是这样创建无模式对话框的,不知道还可以省略.现在的问题是不仅画不出来,而且会弹出调试窗口,大家帮帮忙啊
theDlg是我定义的一个对话框类的对象.
事情已经过去了,没人帮我也罢了,真不知是怎么回事,也许是我的问题没水准吧.嘿嘿