2012-07-04 57 views
0

據我所知,派生的CStatic控件中的My OnPaint()方法應該是切割大於控件的圖形部分。 但它不這樣做。CStatic中的CPaintDC不切割圖形

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

回答

0

@JohnCz明白了。

CDC* pDC = GetDC(); 
CRect rClient(); 
GetClientRect(rClient); 
CRgn ClipRgn; 
if (ClipRgn.CreateRectRgnIndirect(&rClient)) 
{ 
    pDC->SelectClipRgn(&ClipRgn); 
} 


// Drawing content 


pDC->SelectClipRgn(NULL); 
ReleaseDC(pDC); 

謝謝您的回答

0

取決於方法的定義。

OnPaint不是一種真正的方法;它是一個靜態成員函數,用於通過將其映射到消息映射數組中來處理WM_PAINT消息。

對於C++,爲了清晰起見,我個人更喜歡稱它爲成員函數。

您可以使用ON_MESSAGE宏創建自己的處理程序,並根據需要調用它。 代碼片段並沒有說明太多,因爲它沒有顯示繪圖(繪畫)的代碼。您應該包含實際執行痛苦的代碼。

最好的情況是,如果你可以附加項目來展示你的問題。

您是否嘗試繪製比窗口大的大小的簡單位圖?