help!somebody!anybody!——关于VC下图形的打印!

ChouZi 2000-05-23 09:18:00
我是一位VC的新手!现遇见一难题:如何实现对图形的打印呢?图形为曲线是
从数据库中取点化出来,显示在单文挡界面上的!而且要对数据和图形都要打印!
请能解决这方面问题的朋友,帮一下忙!我这表示感谢了。有这方面资料的也请
“慷慨解囊”!啊!
...全文
84 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
superbat 2000-05-23
  • 打赏
  • 举报
回复
这是我编的一个最原始的打印函数,其实打印机打印和你直接在界面上打印没有区别,你只要得到打印机的 pDC就行。我这个CLinePrint类是从一个叫CPrinterJOb类派生出的。好象在该网站的vc类里能找到,如果找不到,我可电邮给你:surper_bat@163.net
void CLinePrint::OnPrint(CDC* pDC, CPrintInfo* pInfo)
{
CRect rectView;
int j;
pDC->SetBkMode(TRANSPARENT);
pMyclass->GetClientRect(&rectView);
CBrush brh;
brh.CreateSolidBrush(::GetSysColor(COLOR_3DFACE));
rectView.top=60;
rectView.right =1920;
rectView.bottom =1240;
CPen penFrame(PS_SOLID,2,::GetSysColor (COLOR_3DDKSHADOW));
pDC->SelectObject(&penFrame);
//pDC->Draw3dRect(82,182,1910,952,::GetSysColor(COLOR_3DSHADOW),::GetSysColor(COLOR_3DHILIGHT));
//pDC->Draw3dRect(84,184,1908,950,::GetSysColor(COLOR_3DDKSHADOW),::GetSysColor(COLOR_3DLIGHT));
CRect rect1(66,186,1990,1090);
CBrush brh1;
pMyclass->m_rectDrw=rect1;
brh1.CreateSolidBrush(RGB(255,255,255));
pDC->FillRect(&rect1,&brh1);
CPen pn0(PS_DOT, 1,::GetSysColor(COLOR_3DLIGHT));
CPen* oldpen=pDC->SelectObject (&pn0);
for(j=68;j<=1980;j+=20 )
{
pDC->MoveTo (j,187 );
pDC->LineTo (j,1089);
CString strt1;
strt1.Format("%d",(j-68)/20);
CFont txtfnt1;
txtfnt1.CreateFont(30,0,0,0,600,true,false,0,DEFAULT_CHARSET,OUT_DEFAULT_PRECIS,
CLIP_DEFAULT_PRECIS,DEFAULT_QUALITY,DEFAULT_PITCH and FF_MODERN,"Arial");
if((j-68)%80==0)
{
pMyclass->Draw3DText(strt1,j-13,1090,pDC,&txtfnt1);
CPen* old;
CPen penscale(PS_SOLID,3,RGB(0,0,0));
old=pDC->SelectObject(&penscale);
pDC->MoveTo(j,1084);
pDC->LineTo(j,1086);
pDC->SelectObject(old);
}
}
CPen pn_solid(PS_SOLID, 3,RGB(0,0,0));
pDC->SelectObject(&pn_solid);
pDC->MoveTo(66,187);
pDC->LineTo(66,1088);
CPen pn_frame(PS_SOLID,2,::GetSysColor(COLOR_3DSHADOW));
pDC->SelectObject(&pn_frame);
for(j=187 ;j<=1120 ;j+=60)
{
pDC->MoveTo (68 ,j);
pDC->LineTo (1968 ,j);
CString strt;
strt.Format("%d",(18-((j-84)/60))*300);
CFont txtfnt;
txtfnt.CreateFont(30,0,0,0,600,true,false,0,DEFAULT_CHARSET,OUT_DEFAULT_PRECIS,
CLIP_DEFAULT_PRECIS,DEFAULT_QUALITY,DEFAULT_PITCH and FF_MODERN,"Arial");
pMyclass->Draw3DText(strt,0,j-16,pDC,&txtfnt);
}
int i;
CString str1,str2;
pDC->MoveTo(68, 430);
CPen pn1(PS_SOLID, 2, RGB(255,0,0));
pDC->SelectObject(&pn1);
//m_rs.MoveFirst();
for(i=0;i<96;i++)
{
int Y1=1088-(pMyclass->Act96[i]-600)/5;
if(Y1>=1088) Y1=1088;
pDC->LineTo(20*i+68,Y1);
}
pDC->MoveTo(68, 430);
CPen pn5(PS_SOLID, 2, RGB(0,0,0));
pDC->SelectObject(&pn5);
//m_rs1.MoveFirst();
for(i=0;i<96;i++)
{
int Y1=1088-(pMyclass->Predict[i]-600)/5;
if(Y1>=1088) Y1=1088;
pDC->LineTo(20*i+68,Y1);
}
pDC->TextOut(1380,70,"实际曲线");
pDC->TextOut(1380,90,"预测曲线");
CPen pn3(PS_SOLID, 3, RGB(255,0,0));
pDC->SelectObject(&pn3);
pDC->MoveTo(1280, 78);
pDC->LineTo(1370,78);
CPen pn2(PS_SOLID, 3, RGB(0,0,0));
pDC->SelectObject(&pn2);
pDC->MoveTo(1280,98);
pDC->LineTo(1370,98);
CFont fnt;
fnt.CreateFont(44,0,0,0,800,false,false,0,GB2312_CHARSET,OUT_DEFAULT_PRECIS,
CLIP_DEFAULT_PRECIS,DEFAULT_QUALITY,DEFAULT_PITCH and FF_MODERN,"楷体GB_2312");
CFont fnt1;
fnt1.CreateFont(32,0,0,0,800,false,false,0,GB2312_CHARSET,OUT_DEFAULT_PRECIS,
CLIP_DEFAULT_PRECIS,DEFAULT_QUALITY,DEFAULT_PITCH and FF_MODERN,"Arial");
pDC->SelectObject(&fnt1);
pDC->TextOut(80,140,"日期:"+pMyclass->str);
CRect rect(670,90,1210,150);
pMyclass->DrawTitle(rect,&fnt,_T("96点负荷预测曲线"),pDC);
pDC->SelectObject (oldpen);
}
}

16,470

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧