Windows/MFC
부모 윈도우에 DC를 이용 메모리 DC생성하기
aucd29
2013. 10. 2. 18:10
[code]
자 오너드로우 버튼들을 만들 다 보니 별의 별 걸 다 겪에 되는데 우선 느낌 문제점이 더블 버퍼링 때문에 생성되는 메모리 DC에 비트맵이다. 요거 기본적으로 검정으로 배경을 칠해버려서 잠시 골치가 아팟는데 새로운 방법을 알게 되었다.
http://www.codeproject.com/staticctrl/TransparentStaticCtrl.asp 를 참조 하였으며 방법이라는건 부모 윈도우에 사용되고 있는 백그라운드 부분을 읽어와서는 비트맵으로 생성해 두고 그 위에 글이던 그림이던 그리게 하는 것이다... 발상에 전환? 이 필요한?
[/code]
[code]
if (mBitmap.GetSafeHandle() == NULL)
{
// 일반적으로 더블 버퍼링을 하려면 배경을 투명하게
// 만들 수가 없기 때문에 미리 배경을 가져와서
// 비트맵으로 생성해두고 이걸 깔면 될 것 같다.
//
CRect rect;
GetWindowRect(rect);
CWnd* pParent = GetParent();
pParent->ScreenToClient(rect);
CDC* pParentDC = pParent->GetDC();
CDC mParentDC;
mParentDC.CreateCompatibleDC(pParentDC);
mBitmap.CreateCompatibleBitmap(pParentDC, rect.Width(), rect.Height());
mParentDC.SelectObject(&mBitmap);
mParentDC.BitBlt(0, 0, rect.Width(), rect.Height(), pParentDC, rect.left, rect.top, SRCCOPY);
pParent->ReleaseDC(pParentDC);
}[/code]
자 오너드로우 버튼들을 만들 다 보니 별의 별 걸 다 겪에 되는데 우선 느낌 문제점이 더블 버퍼링 때문에 생성되는 메모리 DC에 비트맵이다. 요거 기본적으로 검정으로 배경을 칠해버려서 잠시 골치가 아팟는데 새로운 방법을 알게 되었다.
http://www.codeproject.com/staticctrl/TransparentStaticCtrl.asp 를 참조 하였으며 방법이라는건 부모 윈도우에 사용되고 있는 백그라운드 부분을 읽어와서는 비트맵으로 생성해 두고 그 위에 글이던 그림이던 그리게 하는 것이다... 발상에 전환? 이 필요한?
[/code]
[code]
if (mBitmap.GetSafeHandle() == NULL)
{
// 일반적으로 더블 버퍼링을 하려면 배경을 투명하게
// 만들 수가 없기 때문에 미리 배경을 가져와서
// 비트맵으로 생성해두고 이걸 깔면 될 것 같다.
//
CRect rect;
GetWindowRect(rect);
CWnd* pParent = GetParent();
pParent->ScreenToClient(rect);
CDC* pParentDC = pParent->GetDC();
CDC mParentDC;
mParentDC.CreateCompatibleDC(pParentDC);
mBitmap.CreateCompatibleBitmap(pParentDC, rect.Width(), rect.Height());
mParentDC.SelectObject(&mBitmap);
mParentDC.BitBlt(0, 0, rect.Width(), rect.Height(), pParentDC, rect.left, rect.top, SRCCOPY);
pParent->ReleaseDC(pParentDC);
}[/code]