1

タイトルの通りです。派生クラスの CPaintDC でも、GDI の描画が途切れることはありません。前もって感謝します。

void CGraph::OnPaint ()
{
   CPaintDC dc(this);
   dc.SetViewportOrg (0, 400);
   dc.SetMapMode(MM_ISOTROPIC);
   dc.SetWindowExt(1000, 800);
   dc.SetViewportExt(1000, -800);

   // MessageBox(L"OnPaint");
   ProcessData ();
   DrawCoordinateSystem (&dc);
   DrawGrid (&dc);
   DrawGraph (&dc);
}
4

2 に答える 2

2

それで、あなたの CGraph は CStatic から派生し、あなたが示す描画コードは CStatic コントロールの外側にあるダイアログに描画しますか? それは不可能です。コントロールはそれ自体にのみ描画できます。コントロールはあなたが思っているよりも大きくなく、コントロール外だと思っているものは実際にはそうではありませんか? spy++ を使用して cstatic を選択すると、ウィンドウの境界が表示されます。

たぶん、あなたが見ているのは不適切な無効化です。コントロールの上に別のウィンドウをドラッグしてみてください。

それ以外の場合、描画領域を制限する方法は次のとおりです。

  • 描画する場所を手動で追跡します。面倒。
  • SetClipRgn() を使用して、描画を制限する領域を設定します。
  • まったく同じではありませんが、症状が似ている場合があります。コントロールの WS_CLIPSIBLINGS フラグと WS_CLIPCHILDREN フラグ、およびそれがオンになっているダイアログを確認してください。
于 2012-07-04T15:05:07.723 に答える
1

これが私が問題を解決した方法です

    CDC* pDC = GetDC();
    CRect rClient(0,0,1000,800);
    //GetClientRect(rClient);
    CRgn ClipRgn;

    if (ClipRgn.CreateRectRgnIndirect(&rClient))
    {
        pDC->SelectClipRgn(&ClipRgn);
    }

    pDC->SelectObject (PenBlack);
    pDC->MoveTo (-leftMargin*zoomWidth, setPointsCorrected);
    pDC->LineTo (1000*zoomWidth, setPointsCorrected);

    pDC->SelectClipRgn(NULL);
    ReleaseDC(pDC);
于 2012-07-30T06:54:25.847 に答える