Code: Select all
void AAFrame::PrepareDC(wxDC& dc)
{
dc.SetLogicalOrigin( m_xLogicalOrigin, m_yLogicalOrigin );
dc.SetAxisOrientation( !m_xAxisReversed, m_yAxisReversed );
dc.SetUserScale( m_xUserScale, m_yUserScale );
}
void MyCanvas::Draw(wxDC& pdc)
{
wxDC &dc = pdc ;
// Adjust scrolled contents for screen drawing operations only.
if ( wxDynamicCast(&pdc, wxBufferedPaintDC) || wxDynamicCast(&pdc, wxPaintDC) )
{
PrepareDC(dc);
}
m_owner->PrepareDC(dc);
dc.Clear();
if(bg.IsOk())
{
dc.DrawBitmap(bg, 10, 10, true);
}
if(lines.size()>=1)
{
Line l;
double dist;
wxVector<Line>::const_iterator i;
for(i=lines.begin(); i!=lines.end(); i++)
{
l=*i;
if(i==lines.begin())
{
dc.SetTextForeground(l.labelcolor); // 设置字体颜色
dc.SetFont(l.labelfont); // 设置字体大小,粗细,字体
wxPen pen(l.linecolor,l.linewidth);
dc.SetPen(pen);
dc.DrawLine(l.startPoint,l.endPoint);
rulerRatio=rulerSize/lines[0].length;
int x=wxMin(l.startPoint.x,l.endPoint.x)+abs(l.startPoint.x-l.endPoint.x)/2;
int y=wxMin(l.startPoint.y,l.endPoint.y)+abs(l.startPoint.y-l.endPoint.y)/2;
wxSize textsize=dc.GetTextExtent(l.label);
x=x-textsize.GetWidth()/2;
y=y-textsize.GetHeight();
wxPoint centerPt=wxPoint(x,y);
dc.DrawText(l.label,centerPt);
}
else
{
dc.SetTextForeground(l.labelcolor); // 设置字体颜色
dc.SetFont(l.labelfont); // 设置字体大小,粗细,字体
wxPen pen(l.linecolor,l.linewidth);
dc.SetPen(pen);
dc.DrawLine(l.startPoint,l.endPoint);
dist=rulerRatio*l.length;
int x=wxMin(l.startPoint.x,l.endPoint.x)+abs(l.startPoint.x-l.endPoint.x)/2;
int y=wxMin(l.startPoint.y,l.endPoint.y)+abs(l.startPoint.y-l.endPoint.y)/2;
wxSize textsize=dc.GetTextExtent(l.label);
x=x-textsize.GetWidth()/2;
y=y-textsize.GetHeight();
wxPoint centerPt=wxPoint(x,y);
dc.DrawText(l.label,centerPt);
}
}
}
if ( wxDynamicCast(&pdc, wxBufferedPaintDC) ||wxDynamicCast(&pdc, wxPaintDC) )
{
wxCoord x0, y0;
dc.GetDeviceOrigin(&x0, &y0);
m_sizeX = dc.LogicalToDeviceX(dc.MaxX()) - x0+1;
m_sizeY = dc.LogicalToDeviceY(dc.MaxY()) - y0+1;
}
}
void MyCanvas::OnPaint(wxPaintEvent &WXUNUSED(event))
{
wxBufferedPaintDC bpdc(this);
Draw(bpdc);
}