菜鸟再问:帮忙看看这段代码,谢谢了!
日期:2007-04-08 荐:
菜鸟再问:帮忙看看这段代码,谢谢了!void setviewport(HDC hdc1,TRect r,double ymax,double ymin,int xmax) { //这个函数用来设置坐标系 if(ymax-ymin!=0 && xmax!=0) { SetMapMode(hdc1,MM_ANISOTROPIC); //设置坐标映射模式为MM_ANISOTROPIC SetWindowExtEx(hdc1,10000,3000,NULL);//将TImage实际宽高映射到定宽高 SetViewportExtEx(hdc1,r.Width(),-r.Height(),NULL);//设置视口x轴从左向右,y轴从下向上 SetWindowOrgEx(hdc1,0,0,NULL);//窗口原点的位置为(0,0) SetViewportOrgEx(hdc1,0,-r.Height()*ymax/(ymax-ymin),NULL);//设置视口原点的位置 } }void __stdcall drawk(HDC hdc,TRect r,double ymax,double ymin,int xmax){ Graphics::TBitmap *bufbmp = new Graphics::TBitmap(); bufbmp->Width = r.Width(); bufbmp->Height = r.Height(); TRect r1 = Rect(0,0,bufbmp->Width,bufbmp->Height); setviewport(bufbmp->Canvas->Handle,r1,ymax (ymax-ymin)/7,ymin,days) ;//设置坐标系,并在原图上方留(ymax-ymin)/7的余地 double yfd = 3000.0/(ymax-ymin); //设置Y轴放大系数 double xfd = 2500.0/days; //设置X轴放大系数 bufbmp->Canvas->MoveTo(0,ymin*yfd); bufbmp->Canvas->LineTo(4*days*xfd,ymax*yfd); //画一条对角线 setviewport(hdc,r,ymax (ymax-ymin)/7,ymin,days) ;//设置坐标系 BitBlt(hdc,0,ymin*yfd,4*days*xfd,(ymax-ymin)*8/7*yfd,bufbmp->Canvas->Handle,0,ymin*yfd,SRCCOPY); //将bufbmp拷贝到指定的Rect中 delete bufbmp;}原来在.h中实现是可以的,现在放到DLL中,画不出图了,还报内存泄漏。大侠快出手吧,偶是搞不定了。对不起,为了说清楚,我把横坐标最大值days 在void __stdcall drawk(HDC hdc,TRect r,double ymax,double ymin,int xmax)中写为xmax,下面的未改,是同一个变量。用codeguard看看那里有内存泄漏,跟踪一下dll中使用的资源作用域都对么http://www.BoLiLai.com 向全国诚邀代理商和合作伙伴加盟:可以是个人代理或企业代理。联系人:020-85625257邓先生柏利来科技
标签: