문제

데스크탑 구성이 활성화 될 때 이중 소란이 여전히 필요합니까?

Microsoft에서 응용 프로그램 호환 안내서:

그래픽 장치 인터페이스 (GDI)

Windows Vista 및 Windows Server 2008 이전에 Window Handle (HWND)이 화면에 직접 페인트되어 특정 이점이 있었지만 Windows가 최상위 Windows를 표시하고 관리 할 수있는 방법을 제한했습니다. Windows Vista 및 Windows Server 2008에서 모든 최상위 Windows는 오프 스크린 비트 맵 (WS_EX_LAYERED와 유사)으로 렌더링되며 Desktop Window Manager는 이미지를 결합하여 데스크탑을 그립니다.

이제 모든 렌더링이 오프 스크린 비트 맵으로 완료된 것 같습니다.

창은 오프 스크린 비트 맵으로 렌더링됩니다

이 올바른지?

내가 묻는 이유는 표준 페인트주기 동안 여전히 깜박이기 때문입니다.

  • WM_ERASEBKGND
  • WM_PAINT

데스크탑 구성이 활성화되어있는 동안 :

alt text

나는 전화 사이에 그것을 가정했을 것이다

   BeginPaint(hWnd, paintStructure);
   ...
   EndPaint(hWnd, paintStructure);

모든 페인팅은 백 버퍼에 일어날 것입니다.

창은 오프 스크린 비트 맵으로 렌더링됩니다

한편 A 전면 버퍼는 영향을받지 않을 것입니다.

도움이 되었습니까?

해결책

이 올바른지?

YUP (이것은 축소판이 현재 가려진 창의 일부를 보여줄 수있는 방법입니다).

DWM의 화면 렌더링은 이중 청분이 있습니다. 그러나, 그것이 당신의 완충제를 잡고 지우는 것과 그림을 잡으면 ... 그것은 눈에 보이는 인공물로 나타날 것입니다. 따라서 여전히 버퍼를 두 배로 늘려야합니다. 이중 버퍼링은 데스크탑에서 발생합니다 (즉, 각 창이 그려지는 오프 스크린 버퍼가 아닌 다음 데스크탑보기를 완전히 그린 다음 뒤집습니다).

다른 팁

글쎄, 오프 스크린 비트 맵에 그림을 그리면 DWM이 응용 프로그램이 다시 그리기를 기다리지 않고도 원하는대로 창을 합성 할 수 있습니다 (예 : Windows를 다른 Windows 위로 이동할 때 XP의 경우와 같이).

이것은 그렇습니다 ~ 아니다 오프 스크린 표면으로의 그리기는 자동으로 깜박임을 줄입니다. 창을 지우고 다시 그리기를하면 두 동작 사이에서 DWM이 화면을 다시 그리기 (초당 60 회 정도)로 깜박입니다.

애플리케이션이 충분히 빨리로드되지 않으면 "흰색 창"문제를 해결하고 겹치는 창으로 인해 다시 그리기가 줄어 듭니다. 그러나 그것은 깜박 거리는 것에 도움이되지 않습니다. DWM은 페인트 작동이 아직 완료되지 않았으며 내용물을 다시 그릴 때까지 창의 이전 이미지를 표시하고 싶다는 것을 알 수 없습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top