2012-04-10 15 views
0

フリッカーを取り除くために、私はwxPaintDCの代わりにwxBufferedPaintDCを使用します。しかし、問題が生じる。私のペイント関数では、3次のビーサ曲線を描くためにGetGraphicsContextを使ってパスを作成する必要があります。私の質問は、GetGraphicsContextがwxBufferedPaintDCを使用するときにNULLポインタを返す理由です。wxBufferedPaintDC GetGraphicsContextがNULLポインタを返します

void DotGraphView::OnPaint(wxPaintEvent & WXUNUSED(evt)) 
{ 
    wxBufferedPaintDC dc(this); 

    PrepareDC(dc); 

    PaintBackground(dc); 

    wxGCDC &gdc = (wxGCDC&)dc; 
    wxGraphicsContext * gc = gdc.GetGraphicsContext(); /* here gc = NULL */ 
    wxGraphicsPath path = gc->CreatePath(); /* program collapses here */ 

    ... 
} 

答えて

0

wxBufferedPaintDCからwxGCDCにあなたが持っているキャストが私には少し疑わしい、wxGraphicsContextページはこのようにそれをやって提案する:私はあまりにも怪しい感じ

wxGraphicsContext *gc = wxGraphicsContext::Create(dc); 
if (gc) 
{ 
    //drawing code here 
    delete gc; 
} 
+0

私はこのページを読んだが、うまくいかなかった。 – allenchen

0

、提案ページは動作しません。 。 次のコードを使用し、プログラムは正常に実行されます。

wxBufferedPaintDC pdc(this); 

wxGCDC gdc; 
wxGraphicsRenderer * const renderer = wxGraphicsRenderer::GetDefaultRenderer(); 
wxGraphicsContext * context = renderer->CreateContext(pdc); 
gdc.SetGraphicsContext(context); 

wxDC & dc = (wxDC &)gdc; 
PrepareDC(dc); 

Draw(dc); 

... 
0

wxAutoBufferedPaintDCを使用する必要があります。 (GTKのような)一部のプラットフォームでバッファリングする必要はありません。

その後、あなたはコンストラクタ

wxGCDC gcdc(dc); 

これは、少なくともGTKとMSWで動作を使用することができます。

関連する問題