[질문] VC++ 의 메모리 DC 사용에 대해 질문드립니다..
반월
Visual C++ 에서 SDI 모드로 프로젝트 생성후,
윈도우 프레임 영역에 이미지 두개를 띄우는건데요 , 하나는 백그라운드 이미지고 하나는
그냥 조그만 이미지 인데,
백그라운드 이미지는 OnPaint 함수에서 불러오고, 조그만 이미지는 OnDraw 에서 불러옵니다..
그런데...정말 이해가 안가는 부분이 있어 질문드립니다.
OnPaint 함수에서 백그라운드 이미지를 불러오고 난다음, OnDraw 함수를 호출해서
조그만 이미지도 불러오는 건데요,
왜 OnDraw 함수 매개변수로 백그라운드 이미지를 불러온 메모리 DC 를 넣어주는 지 이해가 안갑니다..
그냥 메모리 DC 를 재사용 하는측면인가 생각하여 새로운 메모리 DC 를 만들어서 OnDraw 를 호출하니,
조그만 이미지가 출력이 안되네요..ㅡㅜ
void CRegion3View::OnPaint()
{
CPaintDC dc(this); // device context for painting
//효주 이미지 로드
CBitmap Bmp1;
Bmp1.LoadBitmap(IDB_BACKGROUND_BITMAP);//비트맵을 로드
CDC memDC1;//메모리 DC 선언
memDC1.CreateCompatibleDC(&dc);//클라이언트 DC 와 연결
CBitmap* pOldBmp1 = memDC1.SelectObject(&Bmp1);//메모리 DC 가 비트맵을 사용하도록 지정하줌
BITMAP Info1;//비트맵 정보를 담을 구조체 선언
Bmp1.GetObject(sizeof(BITMAP),&Info1);//비트맵 정보를 구조체에 담음++
/*
CBitmap Bmp2;
Bmp2.LoadBitmap(IDB_BACKGROUND_BITMAP);
CDC memDC2;
memDC2.CreateCompatibleDC(&dc);
CBitmap* pOldBmp2 = memDC2.SelectObject(&Bmp2);
BITMAP Info2;
Bmp2.GetObject(sizeof(BITMAP),&Info2); //새로 만들어 줬던 메모리 DC
*/
OnDraw(&memDC1);// 왜 매개변수로 memDC1 을 넣어주는지 이해가 안됩니다..
//OnDraw(&memDC2); //OnDraw 를 호출해 봤지만 안댑니다..
dc.BitBlt(0,0,Info1.bmWidth,Info1.bmHeight,&memDC1,0,0,SRCCOPY);//클라이언트 DC에 메모리 DC 내용을 카피
memDC1.SelectObject(pOldBmp1);
}void CRegion3View::OnDraw(CDC* pDC)
{
//효주 이미지 로드
CRegion3Doc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
//아이콘 이미지 로드
CBitmap Bmp2;
Bmp2.LoadBitmap(IDB_ICON_BITMAP);
CDC memDC2;
memDC2.CreateCompatibleDC(pDC);
CBitmap* pOldBmp2 = memDC2.SelectObject(&Bmp2);
BITMAP Info2;
Bmp2.GetObject(sizeof(BITMAP),&Info2);
pDC-BitBlt(0,0,Info2.bmWidth,Info2.bmHeight,&memDC2,0,0,SRCCOPY);
memDC2.SelectObject(pOldBmp2);
// TODO: add draw code for native data here
}
-
DevilsTears
onPaint에 onDraw의 부분의 내용을 옮겨서 만들어보심이.. 제가 보기에는 코딩 스타일인거 같은데요.. onPaint/onDraw안에 다넣으셔도 무관할듯..