Programming/MFC [다이얼로그] 다이얼로그 백그라운드에 비트맵 넣기 푸어맨 2016. 11. 23. 13:05 BOOL BarCodeDlg::OnEraseBkgnd(CDC* pDC) { // TODO: 여기에 메시지 처리기 코드를 추가 및/또는 기본값을 호출합니다. //CDC *pDC = GetDC(); // 실제 DC 얻기 CRect rect; GetClientRect(rect); // 현재 창 사이즈 얻기 CDC MemDC; // 메모리 DC CBitmap *pOldBitmap; // 메모리 DC의 비트맵 CBitmap bmp; // 현재 DC 설정의 비트맵 MemDC.CreateCompatibleDC(pDC); // 메모리 DC와 현재 DC의 설정 일치 bmp.CreateCompatibleBitmap(pDC, rect.Width(), rect.Height()); // 비트맵과 현재 DC의 설정 일치 pOldBitmap = (CBitmap *)MemDC.SelectObject(&bmp); // 메모리 DC의 비트맵 선택 MemDC.PatBlt(0, 0, rect.Width(), rect.Height(), WHITENESS); // 패턴 출력 // PATCOPY(복사), BLACKNESS(검정), WHITENESS(흰색), DSTINVERT(색상반전) /////////////////////////////////////////////// // 메모리 DC에 비트맵 그리기 /////////////////////////////////////////////// CBitmap bmpZebra; bmpZebra.LoadBitmap(IDB_BITMAP_ZEBRACODE3); // 비트맵 로드 MemDC.SelectObject(&bmpZebra); BITMAP bmpZebraSize; // 비트맵 오브젝트 bmpZebra.GetObject(sizeof(BITMAP), &bmpZebraSize); // 비트맵 사이즈 얻기 (bmpZebraSize.bmWidth, bmpZebraSize.bmHeight) // StretchBlt ( // HDC hdcDest : 이미지를 출력할 위치의 핸들 // nXOriginDest : 이미지를 출력할 x 좌표 // nYOriginDest : 이미지를 출력할 y 좌표 // nWidthDest : 출력할 이미지의 너비 // nHeightDest : 출력할 이미지의 높이 // (hdcSrc로부터 받은 이미지를 이 너비와 높이에 맞게 이미지 크기를 변경합니다) // hDcSrc : 이미지의 핸들 // nXOriginSrc : 가져올 이미지의 시작지점인 x 좌표 // nOriginSrc : 가져올 이미지의 시작지점인 y 좌표 // (지정한 위치로부터 nWidthSrc, nHeightSrc만큼 이미지를 잘라옵니다) // nWidthSrc : 원본 이미지로부터 해당 크기만큼 잘라낼 이미지의 너비 // nHeightSrc : 원본 이미지로부터 해당 크기만큼 잘라낼 이미지의 높이 // (이 크기만큼 원본 이미지에서 잘라내어 nWidthDest, nHeightDest의 크기에 맞게 이미지 크기를 변경합니다) // dwRop : 이미지의 출력 방법 pDC->StretchBlt(0, 0, rect.Width(), rect.Height(), &MemDC, 0, 0, bmpZebraSize.bmWidth, bmpZebraSize.bmHeight, SRCCOPY); // 사용된 메모리 및 비트맵 삭제 MemDC.SelectObject(pOldBitmap); MemDC.DeleteDC(); return true; return CDialogEx::OnEraseBkgnd(pDC); }