2014-12-16 5 views
0

투명한 영역이있는 하위 프레임 (CWnd 하위 클래스)을 만들려고합니다.Direct2D 투명도 (MFC 포함)

그러나 투명성 부분이 작동하지 않는 것 같습니다. 내가 이해하는 바에는 플래그 (as seen here)를 사용하여 ID2D1HwndRenderTarget을 만들 때 투명성을 활성화해야합니다. 그러나 그런 식으로 렌더링 대상을 만들지는 않습니다. 대신 내 OnCreate() 방법에 EnableD2DSupport()을 사용합니다. 불투명도가 0.0 인 색을 사용하여 CHwndRenderTarget::Clear(ColorF)으로 렌더링 대상을 지우려고하면 불투명도가 무시됩니다. 렌더링 기능이 LPARAM에서 가져온 AFX_WM_DRAW2D 메시지를 처리하는 함수에서이 작업을 수행합니다.

투명성을 얻는 방법에 대한 아이디어가 있으십니까?

답변

1

D2D1_ALPHA_MODE_IGNORE means what it says - 알파 채널은 무시됩니다 (도면은 항상 불투명합니다). 그래서 의문점, 당신은 반대의 문제를 대상과 연결 시켰습니다. 도면은 항상 투명합니다.

앞에서 알 수 있듯이 EnableD2DSupport()ID2D1HwndRenderTarget이지만 대부분 D2D1_ALPHA_MODE_IGNORE 플래그가 생성됩니다. D2D1_ALPHA_MODE_PREMULTIPLIED 또는 D2D1_ALPHA_MODE_STRAIGHT이 필요하므로 알파 채널을 사용할 수 있습니다. -

은 (ID2D1DeviceContext 더 정확한) 가능하면, 적절한 알파 모드를 수동으로 ID2D1HwndRenderTarget를 만든 다음 (I 선택한 것) CHwndRenderTarget::Attach

또 다른 방법입니다 Direct2D의 1.1 방법으로 CHwndRenderTarget에 첨부 수동으로 전체 드로잉 프로세스를 관리합니다. 일부 안내는 this answer을 참조하십시오.

+0

많은 도움을 주셔서 감사합니다. –