0

ちらつきをなくすために、wxPaintDC の代わりに wxBufferedPaintDC を使用します。しかし、問題が発生します。私のペイント関数では、キュービック ベイザー カーブを描画するために、GetGraphicsContext を使用してパスを作成する必要があります。私の質問は、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 */

    ...
}
4

3 に答える 3

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);

...
于 2012-04-11T08:26:12.650 に答える
0

あなたが持っているキャストは、私には少し疑わしいようwxBufferedPaintDCに見えます.wxGraphicsContext ページは、次のようにすることを提案しています:wxGCDC

wxGraphicsContext *gc = wxGraphicsContext::Create( dc );
if (gc)
{
    //drawing code here
    delete gc;
}
于 2012-04-11T07:28:44.550 に答える