请教怎么将基于单文档的绘图转化成基于对话框的绘图
请问如何将基于单文档的绘图转化成基于对话框的绘图
请问如何将基于单文档的绘图转化成基于对话框的绘图.
代码如下:
void CExample_4View::OnKline()
{
// TODO: Add your command handler code here
CExample_4Doc*pDoc=GetDocument();
ASSERT_VALID(pDoc);
pDoc->m_ExaSet.MoveFirst();
if(pDoc->m_ExaSet.IsBOF()||pDoc->m_ExaSet.IsEOF())
return ;
CClientDC ClientDC(this);
OnPrepareDC(&ClientDC);
CBrush Brush[3];
CPen Pen[3];
CBrush*PtrOldBrush;
CPen*PtrOldPen;
Pen[0].CreatePen(PS_SOLID,1,RGB(200,200,254));
Pen[1].CreatePen(PS_SOLID,1,RGB(255,0,0));
Pen[2].CreatePen(PS_SOLID,1,RGB(0,255,0));
Brush[0].CreateSolidBrush(RGB(254,254,234));
Brush[1].CreateSolidBrush(RGB(255,0,0));
Brush[2].CreateSolidBrush(RGB(0,255,0));
PtrOldPen=ClientDC.SelectObject(&Pen[0]);
PtrOldBrush=ClientDC.SelectObject(&Brush[0]);
LOGFONT logFont[2];
logFont[0].lfHeight=24;
logFont[0].lfWeight=0;
logFont[0].lfEscapement=0;
logFont[0].lfOrientation=0;
logFont[0].lfWeight=FW_NORMAL;
logFont[0].lfItalic=0;
logFont[0].lfUnderline=0;
logFont[0].lfStrikeOut=0;
logFont[0].lfCharSet=ANSI_CHARSET;
logFont[0].lfOutPrecision=OUT_DEFAULT_PRECIS;
logFont[0].lfClipPrecision=CLIP_DEFAULT_PRECIS;
logFont[0].lfQuality=PROOF_QUALITY;
logFont[0].lfPitchAndFamily=VARIABLE_PITCH|FF_ROMAN;
strcpy(logFont[0].lfFaceName,"Times New Roman");
UINT position=20;
logFont[1].lfHeight=16;
logFont[1].lfWeight=6;
logFont[1].lfEscapement=0;
logFont[1].lfOrientation=0;
logFont[1].lfWeight=FW_NORMAL;
logFont[1].lfItalic=0;
logFont[1].lfUnderline=0;
logFont[1].lfStrikeOut=0;
logFont[1].lfCharSet=ANSI_CHARSET;
logFont[1].lfClipPrecision=CLIP_DEFAULT_PRECIS;
logFont[1].lfQuality=PROOF_QUALITY;
logFont[1].lfPitchAndFamily=VARIABLE_PITCH|FF_ROMAN;
strcpy(logFont[1].lfFaceName,"Times New Roman");
CFont font[2];
font[0].CreateFontIndirect(&logFont[0]);
font[1].CreateFontIndirect(&logFont[1]);
CFont* oldFont=ClientDC.SelectObject(&font[0]);
ClientDC.TextOut(210,position,"上证指数日K线图");
ClientDC.Rectangle(92,55,517,310);
ClientDC.SelectObject(&font[1]);
int x0,ymin,ymax;
int x1,x2,y1,y2;
int yl1,yl2,yl3,yl4;
int recw=7;
int recwh=recw/2;
int xspc=5;
int yl=225;
float maxmaxp=(float)(1680.3);
float minminp=(float)(1529.35);
float scale;
int loopn;
CString fsl;
// COleDateTime fdt;
int fdt;
scale=(float)((yl-55)/(maxmaxp-minminp));
ClientDC.MoveTo(92,yl);
ClientDC.LineTo(517,yl);
fsl.Format("%g",1529.35);
ClientDC.TextOut(92-48,yl,fsl);
yl1=(int)(yl-(1680.3-1529.35)/3*scale);
ClientDC.MoveTo(92,yl1);
ClientDC.LineTo(517,yl1);
fsl.Format("%g",1529.35+(1680.3-1529.35)/3);
ClientDC.TextOut(92-48,yl1,fsl);
yl2=(int)(yl-(1680.3-1529.35)/3*2*scale);
ClientDC.MoveTo(92,yl2);
ClientDC.LineTo(517,yl2);
fsl.Format("%g",1529.35+(1680.3-1529.35)/3*2);
ClientDC.TextOut(92-48,yl2,fsl);
yl3=(int)(yl-(1680.3-1529.35)/3*3*scale);
ClientDC.MoveTo(92,yl3);
ClientDC.LineTo(517,yl3);
fsl.Format("%g",1680.30);
ClientDC.TextOut(92-48,55,fsl);
x0=92+xspc+recwh+1;
while(!pDoc->m_ExaSet.IsEOF())
{
ClientDC.MoveTo(x0,305);
ClientDC.LineTo(x0,310);
x0=x0+xspc+recw;
pDoc->m_ExaSet.MoveNext();
}
x0=92+xspc+recwh+1;
loopn=1;
pDoc->m_ExaSet.MoveFirst();
while(!pDoc->m_ExaSet.IsEOF())
{
ymin=(int)(yl-(pDoc->m_ExaSet.m_f5-minminp)*scale);
ymax=(int)(yl-(pDoc->m_ExaSet.m_f4-minminp)*scale);
x1=x0-recwh;
x2=x0+recwh;
y1=(int)(yl-(pDoc->m_ExaSet.m_f1-minminp)*scale);
y2=(int)(yl-(pDoc->m_ExaSet.m_f2-minminp)*scale);
if(y1<y2)
{
ClientDC.SelectObject(&Pen[2]);
ClientDC.SelectObject(&Brush[2]);
ClientDC.Rectangle(x1,y1,x2,y2);
ClientDC.MoveTo(x0,ymin);
ClientDC.LineTo(x0,ymax);
}
else
{
ClientDC.SelectObject(&Pen[1]);
ClientDC.SelectObject(&Brush[1]);
ClientDC.Rectangle(x1,y1,x2,y2);
ClientDC.MoveTo(x0,ymin);
ClientDC.LineTo(x0,ymax);
}
if(loopn==1||fmod(loopn,8.0)==0)
{
// fdt=pDoc->m_ExaSet.m_fd;
ClientDC.TextOut(x0-20,310,fdt);
// ClientDC.TextOut(x0-20,310,fdt.Format(LOCALE_NOUSEROVERRIDE,LANG_USER_DEFAULT));
}
x0=x0+xspc+recw;
pDoc->m_ExaSet.MoveNext();
loopn=loopn+1;
}
ClientDC.SelectObject(PtrOldPen);
ClientDC.SelectObject(PtrOldBrush);
ClientDC.SelectObject(oldFont);
}
------解决方案--------------------
请问如何将基于单文档的绘图转化成基于对话框的绘图.
代码如下:
void CExample_4View::OnKline()
{
// TODO: Add your command handler code here
CExample_4Doc*pDoc=GetDocument();
ASSERT_VALID(pDoc);
pDoc->m_ExaSet.MoveFirst();
if(pDoc->m_ExaSet.IsBOF()||pDoc->m_ExaSet.IsEOF())
return ;
CClientDC ClientDC(this);
OnPrepareDC(&ClientDC);
CBrush Brush[3];
CPen Pen[3];
CBrush*PtrOldBrush;
CPen*PtrOldPen;
Pen[0].CreatePen(PS_SOLID,1,RGB(200,200,254));
Pen[1].CreatePen(PS_SOLID,1,RGB(255,0,0));
Pen[2].CreatePen(PS_SOLID,1,RGB(0,255,0));
Brush[0].CreateSolidBrush(RGB(254,254,234));
Brush[1].CreateSolidBrush(RGB(255,0,0));
Brush[2].CreateSolidBrush(RGB(0,255,0));
PtrOldPen=ClientDC.SelectObject(&Pen[0]);
PtrOldBrush=ClientDC.SelectObject(&Brush[0]);
LOGFONT logFont[2];
logFont[0].lfHeight=24;
logFont[0].lfWeight=0;
logFont[0].lfEscapement=0;
logFont[0].lfOrientation=0;
logFont[0].lfWeight=FW_NORMAL;
logFont[0].lfItalic=0;
logFont[0].lfUnderline=0;
logFont[0].lfStrikeOut=0;
logFont[0].lfCharSet=ANSI_CHARSET;
logFont[0].lfOutPrecision=OUT_DEFAULT_PRECIS;
logFont[0].lfClipPrecision=CLIP_DEFAULT_PRECIS;
logFont[0].lfQuality=PROOF_QUALITY;
logFont[0].lfPitchAndFamily=VARIABLE_PITCH|FF_ROMAN;
strcpy(logFont[0].lfFaceName,"Times New Roman");
UINT position=20;
logFont[1].lfHeight=16;
logFont[1].lfWeight=6;
logFont[1].lfEscapement=0;
logFont[1].lfOrientation=0;
logFont[1].lfWeight=FW_NORMAL;
logFont[1].lfItalic=0;
logFont[1].lfUnderline=0;
logFont[1].lfStrikeOut=0;
logFont[1].lfCharSet=ANSI_CHARSET;
logFont[1].lfClipPrecision=CLIP_DEFAULT_PRECIS;
logFont[1].lfQuality=PROOF_QUALITY;
logFont[1].lfPitchAndFamily=VARIABLE_PITCH|FF_ROMAN;
strcpy(logFont[1].lfFaceName,"Times New Roman");
CFont font[2];
font[0].CreateFontIndirect(&logFont[0]);
font[1].CreateFontIndirect(&logFont[1]);
CFont* oldFont=ClientDC.SelectObject(&font[0]);
ClientDC.TextOut(210,position,"上证指数日K线图");
ClientDC.Rectangle(92,55,517,310);
ClientDC.SelectObject(&font[1]);
int x0,ymin,ymax;
int x1,x2,y1,y2;
int yl1,yl2,yl3,yl4;
int recw=7;
int recwh=recw/2;
int xspc=5;
int yl=225;
float maxmaxp=(float)(1680.3);
float minminp=(float)(1529.35);
float scale;
int loopn;
CString fsl;
// COleDateTime fdt;
int fdt;
scale=(float)((yl-55)/(maxmaxp-minminp));
ClientDC.MoveTo(92,yl);
ClientDC.LineTo(517,yl);
fsl.Format("%g",1529.35);
ClientDC.TextOut(92-48,yl,fsl);
yl1=(int)(yl-(1680.3-1529.35)/3*scale);
ClientDC.MoveTo(92,yl1);
ClientDC.LineTo(517,yl1);
fsl.Format("%g",1529.35+(1680.3-1529.35)/3);
ClientDC.TextOut(92-48,yl1,fsl);
yl2=(int)(yl-(1680.3-1529.35)/3*2*scale);
ClientDC.MoveTo(92,yl2);
ClientDC.LineTo(517,yl2);
fsl.Format("%g",1529.35+(1680.3-1529.35)/3*2);
ClientDC.TextOut(92-48,yl2,fsl);
yl3=(int)(yl-(1680.3-1529.35)/3*3*scale);
ClientDC.MoveTo(92,yl3);
ClientDC.LineTo(517,yl3);
fsl.Format("%g",1680.30);
ClientDC.TextOut(92-48,55,fsl);
x0=92+xspc+recwh+1;
while(!pDoc->m_ExaSet.IsEOF())
{
ClientDC.MoveTo(x0,305);
ClientDC.LineTo(x0,310);
x0=x0+xspc+recw;
pDoc->m_ExaSet.MoveNext();
}
x0=92+xspc+recwh+1;
loopn=1;
pDoc->m_ExaSet.MoveFirst();
while(!pDoc->m_ExaSet.IsEOF())
{
ymin=(int)(yl-(pDoc->m_ExaSet.m_f5-minminp)*scale);
ymax=(int)(yl-(pDoc->m_ExaSet.m_f4-minminp)*scale);
x1=x0-recwh;
x2=x0+recwh;
y1=(int)(yl-(pDoc->m_ExaSet.m_f1-minminp)*scale);
y2=(int)(yl-(pDoc->m_ExaSet.m_f2-minminp)*scale);
if(y1<y2)
{
ClientDC.SelectObject(&Pen[2]);
ClientDC.SelectObject(&Brush[2]);
ClientDC.Rectangle(x1,y1,x2,y2);
ClientDC.MoveTo(x0,ymin);
ClientDC.LineTo(x0,ymax);
}
else
{
ClientDC.SelectObject(&Pen[1]);
ClientDC.SelectObject(&Brush[1]);
ClientDC.Rectangle(x1,y1,x2,y2);
ClientDC.MoveTo(x0,ymin);
ClientDC.LineTo(x0,ymax);
}
if(loopn==1||fmod(loopn,8.0)==0)
{
// fdt=pDoc->m_ExaSet.m_fd;
ClientDC.TextOut(x0-20,310,fdt);
// ClientDC.TextOut(x0-20,310,fdt.Format(LOCALE_NOUSEROVERRIDE,LANG_USER_DEFAULT));
}
x0=x0+xspc+recw;
pDoc->m_ExaSet.MoveNext();
loopn=loopn+1;
}
ClientDC.SelectObject(PtrOldPen);
ClientDC.SelectObject(PtrOldBrush);
ClientDC.SelectObject(oldFont);
}
------解决方案--------------------