高分求一个可以打印曲线的VC代码 是那种所见即所得,屏幕显示的是什么,就能按照屏幕比例大小进行打印,多谢了! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 这样试试:用GetDC获取屏幕DC,用CreateDC创建打印DC,然后StartDoc、StretchBlt、EndDoc,再DeleteDC、ReleaseDC。 www.vckbase.com/document/viewdoc/?id=1077 楼主所说的问题 其实就一个函数的内容 SelectClipRgn();所见即所得的打印 我的代码是这样的: void C***View::OnPrepareDC(CDC* pDC, CPrintInfo* pInfo) { CScrollView::OnPrepareDC(pDC, pInfo); pDC->SetMapMode(MM_ANISOTROPIC); //转换坐标映射方式、确定窗口大小 CSize size = CSize(6000, 5000); pDC->SetWindowExt(size); int xLogPixPerInch = pDC->GetDeviceCaps(LOGPIXELSX); //得到实际设备每逻辑英寸的象素数量 int yLogPixPerInch = pDC->GetDeviceCaps(LOGPIXELSY); long xExt = (long)size.cx * xLogPixPerInch/96; //得到设备坐标和逻辑坐标的比例 long yExt = (long)size.cy * yLogPixPerInch/96; pDC->SetViewportExt((int)xExt, (int)yExt);}设定上面这个代码以后 只要在OnDraw里面绘制的东西 就是打印的东西了。 你在OnDraw里面去实现放大 缩小 打印的时候就是放大缩小的了。 为了控制打印的时候打印出纸张限定的边界 在OnDraw当中:void C**View::OnDraw( CDC* pDC ) { ScreenDraw( pDC ); //不打印的时候屏幕绘图 if( pDC->IsPrinting() ) //如果是打印 { CRgn rgn; rgn.CreateRectRgn( 0,0,400,400); pDC->SelectClipRgn( &rgn );//设定打印区域 如果是曲线也不必考虑曲线是否超过了范围 会自动在限定区域边缘截断 ScreenDraw( pDC ); //设定打印区域后再调用屏幕绘图函数,则只有在打印区域当中的绘图被打印出来 }} 我写了下面的代码,没有打印啊,也没有弹出打印对话框之类的。不懂,再次请教 ScreenDraw0(dc,&rect); //不打印的时候屏幕绘图 if( dc->IsPrinting() ) //如果是打印 { CRgn rgn; rgn.CreateRectRgn( 0,0,400,400); dc->SelectClipRgn( &rgn );//设定打印区域 如果是曲线也不必考虑曲线是否超过了范围 会自动在限定区域边缘截断 ScreenDraw0(dc,&rect); //设定打印区域后再调用屏幕绘图函数,则只有在打印区域当中的绘图被打印出来 } 问一个CoCreateInstance()的问题 VC下编译出奇怪的问题 请问动态调试的概念和原理是什么? 关于回调函数,还没弄明白,继续........ 网络广告软件 请问用VC如何把两个WORD文档合并成一个WORD文档? 如何重命名Access数据库中的一个表?(最好是与ADO相关的)谢谢! ADODC控件ReFresh()函数的功能(在线等) 关于背包问题 多线程编程,内存破坏 WM_CONTEXTMENU与WM_RBUTTONDOWN的区别 VC如何制作透明的不规则窗体
{
CScrollView::OnPrepareDC(pDC, pInfo);
pDC->SetMapMode(MM_ANISOTROPIC); //转换坐标映射方式、确定窗口大小
CSize size = CSize(6000, 5000);
pDC->SetWindowExt(size);
int xLogPixPerInch = pDC->GetDeviceCaps(LOGPIXELSX); //得到实际设备每逻辑英寸的象素数量
int yLogPixPerInch = pDC->GetDeviceCaps(LOGPIXELSY);
long xExt = (long)size.cx * xLogPixPerInch/96; //得到设备坐标和逻辑坐标的比例
long yExt = (long)size.cy * yLogPixPerInch/96;
pDC->SetViewportExt((int)xExt, (int)yExt);
}设定上面这个代码以后 只要在OnDraw里面绘制的东西 就是打印的东西了。
你在OnDraw里面去实现放大 缩小 打印的时候就是放大缩小的了。 为了控制打印的时候打印出纸张限定的边界 在OnDraw当中:void C**View::OnDraw( CDC* pDC )
{
ScreenDraw( pDC ); //不打印的时候屏幕绘图
if( pDC->IsPrinting() ) //如果是打印
{
CRgn rgn;
rgn.CreateRectRgn( 0,0,400,400); pDC->SelectClipRgn( &rgn );//设定打印区域 如果是曲线也不必考虑曲线是否超过了范围 会自动在限定区域边缘截断 ScreenDraw( pDC ); //设定打印区域后再调用屏幕绘图函数,则只有在打印区域当中的绘图被打印出来
}
}
ScreenDraw0(dc,&rect); //不打印的时候屏幕绘图
if( dc->IsPrinting() ) //如果是打印
{
CRgn rgn;
rgn.CreateRectRgn( 0,0,400,400); dc->SelectClipRgn( &rgn );//设定打印区域 如果是曲线也不必考虑曲线是否超过了范围 会自动在限定区域边缘截断 ScreenDraw0(dc,&rect); //设定打印区域后再调用屏幕绘图函数,则只有在打印区域当中的绘图被打印出来
}