MemoryDC에서 모든 그림을 다 그려온 다음 bitblt하려고 다음과 같이 했다.
CDC MemDC;
MemDC.CreateCompatibleDC(pDC);
CBitmap bitmap;
bitmap.CreateCompatibleBitmap(pDC, m_BackImage.GetWidth(), m_BackImage.GetHeight());
CBitmap *pBitmap = MemDC.SelectObject(&bitmap);
switch(spec)
{
case 0 :
foo(&MemDC);
break;
case 1 :
foo(&MemDC);
break;
}
그런데 저거 안된다. foo로 호출한 MemDC안에 아무것도 안 그려진다.
그래서 함수 호출하지 않고
switch(spec)
{
case 0 :
MemDC.textout...
break;
case 1 :
MemDC.textout...
break;
}
저렇게 해봐도 안된다. 저 switch / case 문 바깥에서 MemDC에 그리면 뭔 짓을 해도 잘 되는데, 안에서는 뭔짓을 해도 안된다.
그래서 변수 선언만 swtich / case 위에 하고, 나머지는 전부 switch / case 문 안에 넣어버렸다.
CDC dc;
dc.Attach(pDraw->hdc);
// 메모리 DC생성
CDC MemDC;
CBitmap bmp, *pOldBmp;
switch(pDraw->dwItemSpec)
{
case TBCD_TICS:
// 눈금의 경우는 기본 루틴을 실행하도록 설정한다
*pResult = CDRF_DODEFAULT;
break;
case TBCD_THUMB:
// 핸들을 그린다
MemDC.CreateCompatibleDC(&dc);
bmp.CreateCompatibleBitmap(&dc, BitmapSize.cx, BitmapSize.cy);
pOldBmp = MemDC.SelectObject(&bmp);
DrawThumb(&MemDC, pDraw->rc);
dc.BitBlt(0, 0, BitmapSize.cx, BitmapSize.cy, &MemDC, 0, 0, SRCCOPY);
MemDC.SelectObject(pOldBmp);
break;
case TBCD_CHANNEL:
// 범위를 그린다
//DrawChannel(&dc, pDraw->rc, &MemDC);
MemDC.CreateCompatibleDC(&dc);
bmp.CreateCompatibleBitmap(&dc, BitmapSize.cx, BitmapSize.cy);
pOldBmp = MemDC.SelectObject(&bmp);
DrawChannel(&MemDC, pDraw->rc);
dc.BitBlt(0, 0, BitmapSize.cx, BitmapSize.cy, &MemDC, 0, 0, SRCCOPY);
MemDC.SelectObject(pOldBmp);
break;
}
dc.Detach();
'프로그래밍 > VC++' 카테고리의 다른 글
COleDateTime으로 오늘 날짜 가져오기 (0) | 2007.02.02 |
---|---|
COM에서 DATE 타입 사용하기 (0) | 2007.02.02 |
슬라이더 콘트롤의 특징 (0) | 2006.11.09 |
VC++ 2003 tlb를 이용해서 ATL 맹글기 (0) | 2006.11.06 |
CRectTracker를 확대 축소의 경우에 쓸 때 주의할 점. (0) | 2006.10.29 |