2012-10-29 63 views
2

我剛開始學習MFC。我需要畫一個圓圈。如果我使用OnPaint()它可以工作。我應該怎麼做,它會利用背景?這是正確的功能還是應該改變它?MFC畫圈

void Cvaja5Dlg::OnRButtonDown(UINT nFlags, CPoint point) 
{ 
    CPaintDC dc(this); 
    dc.Ellipse(0,0,500,500); 
    CDialogEx::OnRButtonDown(nFlags, point); 
} 
+2

確定要使用[MFC](http://www.relisoft.com/resource/libs.html)嗎? – amaurea

+1

我不想但我必須拼貼。如果這取決於我,我會使用C#。我實際上知道如何做到這一點 – Shawn

+0

您可以使用CClientDC在OnPaint之外進行渲染。它不會持續,但會幫助您在每次點擊時進行繪製,並在背景失效時擦除。 –

回答

6

不,Windows繪畫的工作方式不同。它非常異步。

  1. CPaintDC,因爲它執行BeginPaint()/EndPaint()呼叫應使用僅內部WM_PAINT處理程序。
  2. 所有圖紙通常應執行重寫CWnd::OnPaint()/CView::OnDraw()方法。
  3. 在用戶輸入(例如鼠標右鍵按下)時,您的處理程序應改變您的課程的狀態,例如,設置一些布爾標誌isRightButtonDown並且調用Invalidate()來啓動窗口的異步重新繪製。要強制執行同步重新繪製,您可以在無效後立即使用UpdateWindow()RedrawWindow()
0

如果你想重繪使用OnRedraw()方法是好的... 在那BeginPaint()和endPaint();使用CPAINTDC創建