//函数功能:图像上移动点 //参数:当前点坐标 long CMapEditor10View::MovePoint(CPoint tempxy) { if(m_step==0) return (0); CPen newpen(PS_SOLID,2,RGB(255,255,255));//构造画笔对象 //获得本窗口或当前活动视图 CClientDC dc(this); CPen *pOldPen=dc.SelectObject(&newpen);//将画笔选入DC,SelectObject函数返回先前画笔 //设置异或模式画点 //dc.SetROP2(R2_NOT); //这里抹去一个小十字 dc.MoveTo(nowPoint.x,nowPoint.y-6); dc.LineTo(nowPoint.x,nowPoint.y+6); dc.MoveTo(nowPoint.x-6,nowPoint.y); dc.LineTo(nowPoint.x+6,nowPoint.y); CPen oldpen(PS_SOLID,2,RGB(192,192,192)); //构造画笔对象 dc.SelectObject(&oldpen); //将画笔选入DC,SelectObject函数返回先前画笔 //这里画一个小十字 dc.MoveTo(tempxy.x,tempxy.y-6); dc.LineTo(tempxy.x,tempxy.y+6); dc.MoveTo(tempxy.x-6,tempxy.y); dc.LineTo(tempxy.x+6,tempxy.y); nowPoint=tempxy; //把当前点存为上一点 GPntChanged=1; ::ReleaseDC(m_hWnd,dc); return (1); }
//函数功能:造线 //参数: long CMapEditor10View::CreateLinMM(CPoint point) { if(MakingLine==1) { DrawPoint(point,pntColor); CPen newpen(PS_SOLID,2,RGB(255,0,0)); //构造画笔对象 CPen oldpen(PS_SOLID,2,RGB(255,255,255)); //构造画笔对象 CClientDC dc(this); //获得本窗口或当前活动视图 CPen *pOldPen=dc.SelectObject(&newpen); //将画笔选入DC,SelectObject函数返回先前画笔 //这里标亮要移动的点 dc.MoveTo(lastPoint.x,lastPoint.y); dc.LineTo(point.x,point.y); dc.SelectObject(&oldpen); //将画笔选入DC,SelectObject函数返回先前画笔 //这里标亮要移动的点 dc.MoveTo(lastPoint.x,lastPoint.y); dc.LineTo(templastPoint.x,templastPoint.y); //这里删除上一个点 dc.MoveTo(templastPoint.x,templastPoint.y-6); dc.LineTo(templastPoint.x,templastPoint.y+6); dc.MoveTo(templastPoint.x-6,templastPoint.y); dc.LineTo(templastPoint.x+6,templastPoint.y); templastPoint=point; ::ReleaseDC(m_hWnd,dc); } return 1; }
//函数功能:图像中移动线 //参数:坐标点 long CMapEditor10View::MoveLin(CPoint point) // { int i; POINT pt; POINT lins[500]; if(step==0) { startPnt.x=0; startPnt.y=0; return (0); } else if(step==1) { CClientDC dc(this); //获得本窗口或当前活动视图 CPen newpen(PS_SOLID,2,linColor); //构造画笔对象 dc.SetROP2(R2_NOTXORPEN); CPen *pOldPen=dc.SelectObject(&newpen); //将画笔选入DC,SelectObject函数返回先前画笔 long disX=point.x - startPnt.x; //计算坐标偏移 long disY=point.y - startPnt.y; for(i=0;i< LinPntNum;i++) { if(i==0) dc.MoveTo(linPnt[i]); else dc.LineTo(linPnt[i]); pt.x=linPnt[i].x + disX; pt.y=linPnt[i].y + disY; lins[i]=pt; } CPen oldpen(PS_SOLID,2,linColor); //构造画笔对象 dc.SelectObject(&oldpen); //将画笔选入DC,SelectObject函数返回先前画笔 for(i=0;i<LinPntNum;i++) { linPnt[i]=lins[i]; if(i==0) dc.MoveTo(lins[i]); else dc.LineTo(lins[i]); } startPnt=point; ::ReleaseDC(m_hWnd,dc); } return (1); }
void LineNumberWidget::paintEvent( QPaintEvent* /*e*/ ) { int max=0; int l=0; QPainter painter( this ); painter.setFont(numfont); const QFontMetrics fm(numfont); int yOffset = m_editor->verticalScrollBar()->value(); QTextDocument *doc = m_editor->document(); int i = 1; QTextBlock p = doc->begin(); QString numtext; const QBrush oldbrush=painter.brush(); QPen oldpen(QColor("#136872")); oldpen.setStyle(Qt::SolidLine); painter.setPen(oldpen); painter.drawLine(width()-2,0,width()-2,height()); while ( p.isValid() ) { QPointF point = p.layout()->position(); if ( point.y() + 20 - yOffset < 0 ) { i++; p = p.next(); continue; } if ( (int)(point.y()) - yOffset > height() ) break; for (int j = 0; j < 3; ++j) { if (m_editor->UserBookmark[j]==i) { const QBrush brush(QColor("#1B8EA6")); painter.fillRect(2, (int)(point.y()) - yOffset,fm.width("0")+6,fm.lineSpacing(), brush); const QPen pen(QColor("#FFFFFF")); painter.setPen(pen); painter.drawText(4, (int)(point.y()) - yOffset,width()-4,fm.lineSpacing(),Qt::AlignLeft | Qt::AlignTop,QString::number(j+1)); } } painter.setPen(oldpen); numtext=QString::number(i); painter.drawText(0, (int)(point.y()) - yOffset,width()-4,fm.lineSpacing(),Qt::AlignRight | Qt::AlignTop,numtext); l= fm.width(numtext)+18+fm.width("0"); if (l>max) max=l; i++; p = p.next(); } if (i>=10000) setFixedWidth(max); painter.end(); }