Windows는 XP에서 반복적으로 페인트를 형성하지만 Vista에서는 그렇지 않습니다.

StackOverflow https://stackoverflow.com/questions/1282911

문제

응용 프로그램에서 문제를 해결하려고합니다. 나는 Vista에서 응용 프로그램을 개발하고 있으며 거기서 잘 작동하지만 XP로 가져 가면 양식이 느리고 응답하지 않습니다. 브레이크 포인트를 사용하여 Windows 메시지를 볼 때 XP에서 양식이 한 번마다 반복적으로 페인트되어 있습니다 (실제로 필요하지는 않더라도). 그러나 Vista에 대한 동일한 테스트는이 반복적 인 그림을 보여주지 않습니다.

이것을 일으킬 수있는 것에 대한 아이디어가 있습니까?

도움이 되었습니까?

해결책

모두의 의견에 감사드립니다. 전복의 도움으로 문제가 해결되었습니다! 창의 부진은 비교적 새로운 문제 였기 때문에 소스 코드에서 전복을 사용하여 시간을 되돌아보기로 결정했고 최근에 WS_EX_Composited Style 플래그를 형태에 적용하여 Vista의 깜박임을 줄였습니다.

protected override CreateParams CreateParams
{
    get
    {
        CreateParams result = base.CreateParams;
        result.ExStyle |= 0x02000000; // WS_EX_COMPOSITED
        return result;
    }
}

내가 댓글을 달았을 때, 양식은 XP에서 다시 반응했고 반복적 인 WM_Paint 메시지가 사라졌습니다. 따라서 솔루션은 Vista 또는 나중에 WS_EX_COCITED 만 적용하는 것이 었습니다.

protected override CreateParams CreateParams
{
    get
    {
        CreateParams result = base.CreateParams;
        if (Environment.OSVersion.Platform == PlatformID.Win32NT 
            && Environment.OSVersion.Version.Major >= 6)
        {
            result.ExStyle |= 0x02000000; // WS_EX_COMPOSITED
        }

        return result;
    }
}

이제 모든 것이 잘 작동합니다!

다른 팁

특정 코드 등을 보지 않으면 귀하의 특정 문제에 대해 전혀 모릅니다. 그러나 Vista의 창 그림은 데스크탑 창 관리자 (DWM)로 인해 크게 다릅니다. 각 창의 이미지는 구성 효과로 인해 실제로 캐시/이중 부러되므로 다시 페인팅의 깜박임을 볼 수 없습니다.

DWM이 Vista에 마스킹하는 문제이기 때문에 XP에서 문제를 해결하는 데 집중할 것을 제안합니다.

무언가가 창의 일부 또는 전부가 무효화되게합니다.

@jon이 자세히 설명하지는 않았지만 다음은 다음과 같습니다.

  1. 맞춤형 페인트 로직이 있습니까? 설명하십시오.
  2. 코드에 타이머가 있습니까? 걔들 뭐해?
  3. 깜박임은 프로그램이 사용 중일 때 또는 손이 컴퓨터에서 벗어나 시청할 때만 발생합니까?
  4. 표준 .NET 컨트롤 또는 제어 라이브러리 / 사용자 컨트롤을 사용하고 있습니까?
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top