2009-08-18 3 views
2

시간이 많이 걸리는 작업을 처리 할 때 사용자에게 알리기 위해 비 침투성 팝업 창을 생성합니다. 그러나불투명 한 텍스트와 버튼이 포함 된 투명 창

alt text http://img6.imageshack.us/img6/3144/transparentn.jpg

내가 (꽤 보이지 않는 불투명 표시 텍스트와 닫기 버튼을 싶습니다 순간 나는 나에게 합리적인 결과를 제공하는 SetLayeredWindowAttributes를 호출하여 투명성을하고 있어요 흰색 텍스트로 오른쪽)을 투명하게 유지하면서이 작업을 수행 할 수 있습니까?

+1

죄송합니다. stackoverflow에 PM 기능이 없습니다. 따라서 여기에 의견을 제시해야합니다. 최종 솔루션 코드를 공유 하시겠습니까? Koro가 지적한 것과 유사합니까? 감사 – Steve

답변

10

계층화 된 창에서 "적절한"알파를 수행하려면 UpdateLayeredWindow을 호출하여 창 관리자에게 PARGB 비트 맵을 제공해야합니다.

  1. PixelFormat32bppPARGB 픽셀 형식의 GDI + Bitmap 객체를 생성 :

    내가 알고있는 그이를 달성 할 수있는 가장 깨끗한 방법은 다음과 같다.

  2. Bitmap 개체에 그리는 Graphics 개체를 만듭니다.
  3. GDI +를 사용하여 모든 개체를이 개체로 만듭니다.
  4. 2.
  5. 를 호출 Bitmap 개체의 GetHBITMAP 방법은 윈도우 HBITMAP 얻을 단계에서 만든 Graphics 오브젝트를 파괴한다.
  6. Bitmap 개체를 삭제합니다.
  7. CreateCompatibleDC을 사용하여 메모리 DC를 만들고 5 단계에서 HBITMAP을 선택하십시오.
  8. 메모리 DC를 원본으로 사용하여 UpdateLayeredWindow를 호출합니다.
  9. 이전 비트 맵을 선택하고 메모리 DC를 삭제하십시오. 배경 투명, 텍스트와 버튼 불투명 :
  10. 이 방법은 당신이 그려지는 모든의 알파 채널을 제어 할 수 있도록해야 HBITMAP 5 단계

에서 만든 파괴한다.또한

, 텍스트를 출력 할 것 때문에, 나는 당신이 기본 안티 앨리어싱 설정 (SPI_GETFONTSMOOTHING)를 얻을 수 SystemParametersInfo를 호출하는 것이 좋습니다 다음 그래픽에 SetTextRenderingHint은 같은 유형으로 안티 앨리어싱 유형을 설정하는 객체 보다 사용자 친화적 인 디자인을 위해 사용자가 구성했습니다.

0

확실히 말할 수는 없지만 모든 것이 창이므로 버튼의 계층화 된 속성을 설정하여 불투명하게 설정할 수 있습니다.

텍스트에 관해서는, 당신이 설정 배경과 전경 색상으로 자신의 프레임에 그것을 넣어, 그 레이어는 배경 색상을 투명하게 속성을 수정할 수 있습니다 ...

그러나이 이후

은 자식 창 및 최상위 창이 아니라, 정말 작동하는지 모르겠다.

3

하나가 아닌 알파 블렌드가있는 최상위 창과 불투명 한 텍스트와 버튼이 있지만 투명 배경이있는 첫 번째 창 위에 표시되는 두 개의 최상위 창이 필요하다고 생각됩니다. 이 작업을 단일 창으로 수행하려면 UpdateLayeredWindow API 호출을 사용해야하지만 상호 작용할 때 단추를 다시 그리지 않습니다 (하이라이트, 포커스 등을 가리키면)

이 응용 프로그램은 Vista에서만 사용할 수있는 새로운 API 호출이 있지만 XP 또는 이전 버전에서는 사용할 수 없다고 생각합니다.

관련 문제