急:如何分别用实线虚线和点划线画图,打印时能根据需要调整图形的大小。在线等! 如何分别用实线虚线和点划线画图,打印时能根据需要调整图形的大小,请给出实例 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 先说操作系统Win98还是WinNT以上? 如何按照线型画粗线 WINNT下,可以用以下方式创建画笔 LOGBRUSH brush; brush.lbColor=DrawColor; brush.lbStyle=BS_SOLID;mPen.CreatePen(PS_GEOMETRIC|PS_USERSTYLE|PS_ENDCAP_FLAT,(int)LineWide,&brush,i,PenStyle); Win98中,给DC设置合适的笔宽,选择实线,下面函数可以根据PenStyle数组给定长度值画直线。如果画曲线或者折线,需要把曲线离散成直线段,根据上次画线返回值确定本次画线的起始值,就可以了#include "math.h"DWORD PenStyle[16] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};typedef struct xyz { double x; double y; double z;} XYZ,*PXYZ,**PPXYZ; //按照PenStyle[]画一条从p1点到p2点的直线//例如PenStyle[0]=5,PenStyle[1]=2表示按照长度为5的实线、长度为2的间隔形成的线型画线//_____ _____ _____ _//并且指定从线型的何处画,例如iStart=6从Penstyle[1]处的第二个空格开始画//iStart取值范围为0到一个线型的总长度-1//返回值:线型总长度与剩余最后一段线长度之差,表示下一次画线应该指定的从何处开始画int DrawLineA(CDC* pDC,POINT p1,POINT p2,int iStart){ int i=0; int iEnd=0;//返回值,表示最后一段不完全的线段的长度 //计算直线长度 double dDistance=sqrt((p2.x-p1.x)*(p2.x-p1.x)+(p2.y-p1.y)*(p2.y-p1.y)); int iLineType=0;//线型的长度 if(dDistance<2) { for(i=0;i<16;i++) { if(PenStyle[i]==0)break; iLineType+=PenStyle[i]; } iEnd=(int(iStart-dDistance))%iLineType; if(iEnd<0)iEnd+=iLineType; return iEnd; } double ddltx[16]={0,0,0,0,//每一段线型的x距离 0,0,0,0, 0,0,0,0, 0,0,0,0}; double ddlty[16]={0,0,0,0,//每一段线型的y距离 0,0,0,0, 0,0,0,0, 0,0,0,0}; double dXScale=(p2.x-p1.x)/dDistance;//x方向长度和总长度比例 double dYScale=(p2.y-p1.y)/dDistance;//y方向长度和总长度比例 //计算每一段线型的x、y距离及线型的长度 for(i=0;i<16;i++) { if(PenStyle[i]==0)break; ddltx[i]=PenStyle[i]*dXScale; ddlty[i]=PenStyle[i]*dYScale; iLineType+=PenStyle[i]; } iEnd=(int(dDistance+iStart))%iLineType; if(iEnd<0)iEnd+=iLineType; XYZ pp={0,0,0};//第一段之前的完整线型开始点 pDC->MoveTo(p1); int iLength=-iStart;//已经画的线段的长度 pp.x=iLength*dXScale+p1.x; pp.y=iLength*dYScale+p1.y; for(;;) { for(i=0;i<16;i++) { if(PenStyle[i]==0)break; pp.x+=ddltx[i]; pp.y+=ddlty[i]; iLength+=PenStyle[i]; if(i%2==0) { if(iLength>0) { if(iLength<dDistance) { pDC->LineTo(pp.x,pp.y); } else { pDC->LineTo(p2); return iEnd; } } }else { if(iLength>0) { if(iLength<dDistance) { pDC->MoveTo(pp.x,pp.y); } else { pDC->MoveTo(p2); return iEnd; } } } } } return iEnd;} 先CreatePen创建一个画笔然后SelectObject选择画笔 你最好做一个坐标变换,或者也可以用ScaleViewportExt吧 PenStyle[16] = {5,2,5,2,5,2,5,2,5,2,5,2,5,2,5,2};表示按照长度为5的实线、长度为2的间隔形成的线型PenStyle[16] = {5,3,4,5,3,4,5,3,4,5,3,4,5,3,4,5};表示按照长度5的实线,长为3的间隔,再长度4的实线---最后间隔为五的线型来画线,是吧。应把这程序加在哪里?在打印时有什么要特别注意的,请给出程序 不不不PenStyle[16] = {5,2,0}这样用,后面用零结尾要有偶数个才好如何按照线型画粗线 WINNT下,可以用以下方式创建画笔,WINNT下的那个PenStyle基本也是这个意思 LOGBRUSH brush; brush.lbColor=DrawColor; brush.lbStyle=BS_SOLID;mPen.CreatePen(PS_GEOMETRIC|PS_USERSTYLE|PS_ENDCAP_FLAT,(int)LineWide,&brush,i,PenStyle); LOGBRUSH brush; brush.lbColor=RGB(5, 5, 5); brush.lbStyle=BS_DASH; CPen mPen=CreatePen(PS_GEOMETRIC|PS_USERSTYLE|PS_ENDCAP_FLAT,8,&brush,i,BS_DASH); //CPen pen2(PS_SOLID, 1, RGB(5, 5, 5));/////开环响应曲线的颜色 pOldPen=pDC->SelectObject(&mPen);虚线类型是BS_DASH 吗? debug成功 release提示Resource.h头文件打不开 求curl删除ftp文件夹、重命令文件!!! 谁有PUDN账号,帮忙下个源码 为什么我的网络服务程序会有莫名其妙的内存泄漏? 关于类中static变量的一个问题! 如何动态的改变对话框的大小? 高分求,单文档如何打开大的文档? 进程间的变量访问控制 windows编程中,每个窗口可以有多少个窗口处理函数? 中拳求救!求救!求救!求救!(硬盘数据恢复) traceroute的问题! 要把一个对话框编辑控件中的字符串送到另一个对话框的编辑控件里
WINNT下,可以用以下方式创建画笔 LOGBRUSH brush; brush.lbColor=DrawColor; brush.lbStyle=BS_SOLID;mPen.CreatePen(PS_GEOMETRIC|PS_USERSTYLE|PS_ENDCAP_FLAT,(int)LineWide,&brush,i,PenStyle); Win98中,给DC设置合适的笔宽,选择实线,下面函数可以根据PenStyle数组给定长度值画直线。如果画曲线或者折线,需要把曲线离散成直线段,根据上次画线返回值确定本次画线的起始值,就可以了#include "math.h"DWORD PenStyle[16] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};typedef struct xyz { double x; double y; double z;} XYZ,*PXYZ,**PPXYZ; //按照PenStyle[]画一条从p1点到p2点的直线//例如PenStyle[0]=5,PenStyle[1]=2表示按照长度为5的实线、长度为2的间隔形成的线型画线//_____ _____ _____ _//并且指定从线型的何处画,例如iStart=6从Penstyle[1]处的第二个空格开始画//iStart取值范围为0到一个线型的总长度-1//返回值:线型总长度与剩余最后一段线长度之差,表示下一次画线应该指定的从何处开始画int DrawLineA(CDC* pDC,POINT p1,POINT p2,int iStart){ int i=0; int iEnd=0;//返回值,表示最后一段不完全的线段的长度 //计算直线长度 double dDistance=sqrt((p2.x-p1.x)*(p2.x-p1.x)+(p2.y-p1.y)*(p2.y-p1.y)); int iLineType=0;//线型的长度 if(dDistance<2) { for(i=0;i<16;i++) { if(PenStyle[i]==0)break; iLineType+=PenStyle[i]; } iEnd=(int(iStart-dDistance))%iLineType; if(iEnd<0)iEnd+=iLineType; return iEnd; } double ddltx[16]={0,0,0,0,//每一段线型的x距离 0,0,0,0, 0,0,0,0, 0,0,0,0}; double ddlty[16]={0,0,0,0,//每一段线型的y距离 0,0,0,0, 0,0,0,0, 0,0,0,0}; double dXScale=(p2.x-p1.x)/dDistance;//x方向长度和总长度比例 double dYScale=(p2.y-p1.y)/dDistance;//y方向长度和总长度比例 //计算每一段线型的x、y距离及线型的长度 for(i=0;i<16;i++) { if(PenStyle[i]==0)break; ddltx[i]=PenStyle[i]*dXScale; ddlty[i]=PenStyle[i]*dYScale; iLineType+=PenStyle[i]; } iEnd=(int(dDistance+iStart))%iLineType; if(iEnd<0)iEnd+=iLineType; XYZ pp={0,0,0};//第一段之前的完整线型开始点 pDC->MoveTo(p1); int iLength=-iStart;//已经画的线段的长度 pp.x=iLength*dXScale+p1.x; pp.y=iLength*dYScale+p1.y; for(;;) { for(i=0;i<16;i++) { if(PenStyle[i]==0)break; pp.x+=ddltx[i]; pp.y+=ddlty[i]; iLength+=PenStyle[i]; if(i%2==0) { if(iLength>0) { if(iLength<dDistance) { pDC->LineTo(pp.x,pp.y); } else { pDC->LineTo(p2); return iEnd; } } }else { if(iLength>0) { if(iLength<dDistance) { pDC->MoveTo(pp.x,pp.y); } else { pDC->MoveTo(p2); return iEnd; } } } } } return iEnd;}
然后SelectObject选择画笔
表示按照长度为5的实线、长度为2的间隔形成的线型
PenStyle[16] = {5,3,4,5,3,4,5,3,4,5,3,4,5,3,4,5};
表示按照长度5的实线,长为3的间隔,再长度4的实线---最后间隔为五的线型来画线,是吧。
应把这程序加在哪里?
在打印时有什么要特别注意的,请给出程序
要有偶数个才好
如何按照线型画粗线
WINNT下,可以用以下方式创建画笔,WINNT下的那个PenStyle基本也是这个意思 LOGBRUSH brush; brush.lbColor=DrawColor; brush.lbStyle=BS_SOLID;mPen.CreatePen(PS_GEOMETRIC|PS_USERSTYLE|PS_ENDCAP_FLAT,(int)LineWide,&brush,i,PenStyle);
pOldPen=pDC->SelectObject(&mPen);
虚线类型是BS_DASH 吗?