wxGraphicsContext是wxWidgets高级绘图类。
wx的手册上有个如下的Demo:
void MyCanvas::OnPaint(wxPaintEvent &event)
{
// Create paint DC
wxPaintDC dc(this);
// Create graphics context from it
wxGraphicsContext *gc = wxGraphicsContext::Create( dc );
if (gc)
{
// make a path that contains a circle and some lines
gc->SetPen( *wxRED_PEN );
wxGraphicsPath path = gc->CreatePath();
path.AddCircle( 50.0, 50.0, 50.0 );
path.MoveToPoint(0.0, 50.0);
path.AddLineToPoint(100.0, 50.0);
path.MoveToPoint(50.0, 0.0);
path.AddLineToPoint(50.0, 100.0 );
path.CloseSubpath();
path.AddRectangle(25.0, 25.0, 50.0, 50.0);
gc->StrokePath(path);
delete gc;
}
}
我一般在windows使用wx,可事实上,这段代码没效果。
所以我就去看了一下sample(Drawer)
精简了一下,使用方法如下:
wxGCDC gdc;
wxGraphicsRenderer* const renderer = wxGraphicsRenderer::GetDefaultRenderer();
wxGraphicsContext* gc;
if ( wxPaintDC *paintdc = wxDynamicCast(&dc, wxPaintDC) )
{
gc = renderer->CreateContext(*paintdc);
}
else if ( wxMemoryDC *memdc = wxDynamicCast(&dc, wxMemoryDC) )
{
gc = renderer->CreateContext(*memdc);
}
if (gc)
{
gc->SetPen( *wxRED_PEN );
wxGraphicsPath path = gc->CreatePath();
//操作path ...
//stroke是显示路径
gc->StrokePath(path);
//另外fillPath是填充路径,closePath是连接首尾点,会多一条线出来
}