[원문] CDC MemDC; MemDC.CreateCompatibleDC(pDC); CBitmap bmpBack; bmpBack.LoadBitmap(IDB_BKIMG2); CBitmap *pOldBackBitmap = (CBitmap*) MemDC.SelectObject(&bmpBack); BITMAP backBitMap; bmpBack.GetBitmap(&backBitMap); pDC->BitBlt(0, 0, backBitMap.bmWidth, backBitMap.bmHeight, &MemDC, 0, 0, SRCCOPY); MemDC.SelectObject(pOldBackBitmap); MemDC.DeleteDC();
//아이콘, 선 출력 CDC dcMem; dcMem.CreateCompatibleDC(pDC); pOldBackBitmap = (CBitmap*) dcMem.SelectObject(&bmpBack); HICON hIcon; hIcon = AfxGetApp()->LoadIcon(MAKEINTRESOURCE(IDI_EQICON)); for(int i = 0 ; i < 10 ; i++){ for(int j = 0 ; j < 10 ; j++) { ::DrawIconEx(dcMem.GetSafeHdc(), i* 40, j*40, hIcon, 30, 30, 0, NULL, DI_NORMAL); } } DestroyIcon(hIcon); CPen myPen; myPen.CreatePen(PS_SOLID, 5, RGB(255, 255, 0)); CPen* pOldPen = NULL; pOldPen = (CPen*)dcMem.SelectObject(&myPen); dcMem.MoveTo(0, 600); dcMem.LineTo(500, 600); BLENDFUNCTION bf; bf.AlphaFormat = 0; bf.BlendFlags = 0; bf.BlendOp = AC_SRC_OVER; bf.SourceConstantAlpha = 100; BOOL bRes = AlphaBlend(pDC->GetSafeHdc(), 0, 0, backBitMap.bmWidth, backBitMap.bmHeight,dcMem.GetSafeHdc(), 0, 0, backBitMap.bmWidth, backBitMap.bmHeight, bf); if(!bRes) { AfxMessageBox(GetLastError(), MB_ICONERROR); }
dcMem.SelectObject(pOldPen); dcMem.DeleteDC();
반투명될 DC에도 배경이미지를 그리고 이후에 아이콘과 선을 그리니 아이콘과 선도 반투명이 되는군요.. 답변주신분들 감사합니다.^^ |
AlphaBlend() 함수를 이용한 반투명 처리
2008. 2. 6. 20:57