프로그래밍/VC++

switch / case의 이상한 경험

panpro 2007. 1. 25. 11:18

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