2014-10-03 2 views
0

음, 아주 간단한 것을 원하지만 혼란 스럽습니다.CDialog :: OnPaint에서 페인트 기능 호출하기

void CAppDlg::OnPaint() 
    { 
     CPaintDC dc(this); 
     CDC pdc; 
     pdc.CreateCompatibleDC(&dc); 
     CBitmap *oldBmp = pdc.SelectObject(&m_BmpImg[0]); 
     dc.BitBlt(0, 0, m_SizBmpImg[0].cx, m_SizBmpImg[0].cy, &pdc, 0, 0, SRCCOPY); 
     dc.SelectObject(&oldBmp); 
    } 

위 코드에서 나는 마지막 3 줄을 별도의 기능에 넣고 싶습니다. 이제 CPaintDC를 함수 매개 변수로 전달할 수 없으므로이를 CDC 또는 CMemDC로 변환해야합니다. 또한이 pdc (CDC pdc)를 전달하거나 내 함수 내에서 새로운 pdc를 작성해야합니다.

설명이 약간있는 샘플은 큰 도움이됩니다.

+1

매개 변수로 참조 또는 포인터로 전달할 수 있습니다. –

답변

0

이렇게하면됩니다.

void CAppDlg::OnPaint() 
{ 
    CPaintDC dc(this); 
    CDC pdc; 
    pdc.CreateCompatibleDC(&dc); 

    YourSeparateFUnction(dc, pdc); 
} 

void CAppDlg::YourSeparateFUnction(CPaintDC & dc, CDC & pdc) 
{ 
    CBitmap *oldBmp = pdc.SelectObject(&m_BmpImg[0]); 
    dc.BitBlt(0, 0, m_SizBmpImg[0].cx, m_SizBmpImg[0].cy, &pdc, 0, 0, SRCCOPY); 
    dc.SelectObject(&oldBmp); 
} 
+0

무효 CAppDlg :: PaintSeperated (CDC * pDC, CDC * pDcCompatible) - CPaintDC는 OnPaint에서만 사용할 수 있습니다. – hypheni

+2

'OnPaint'가 아닌 다른 함수에서'PaintSeperated'를 호출하고 있습니까? –

+3

@hypheni :'CPaintDC'는 특수 장치 컨텍스트를 나타내지 않습니다. 'CPaintDC'와'CDC'의 유일한 차이점은''BeginPaint''와''EndPaint''를 각각 호출하여 화면 영역을 적절하게 검증한다는 것입니다. 'CPaintDC'를 참조로 전달하는 것은 문제가되지 않지만, 대신에 참조로 generic 기본 클래스를 전달할 수 있습니다 (또는해야합니다) :'CDC &'. – IInspectable

관련 문제