이제 Windows 10에서 실행해야하는 레거시 응용 프로그램을 상속했습니다. 테스트하는 동안 프로그램의 일부 (도구 모음으로 배치 된 하위 창)가 프로그램 시작시 부분적으로 만 추출된다는 것을 발견했습니다. 절반 이상 툴바 오른쪽의 검은 색 만 그릴 것입니다. 런타임시 전체 윈도우의 크기를 조정하여 도구 막대 윈도우의 크기를 변경하거나 다시 그리는 것이 수정되었습니다. 우리는 결국 "Disable display scaling"을 설정하면 버그를 완전히 막을 수있는 것으로 나타났습니다 (지금까지 10,000 개가 넘는 자신감을 테스트 한 결과 나에게 충분 함)."디스플레이 배율 사용 안 함"으로 어떤 버그가 수정 되었습니까?
질문 :
이 문제를 유일한 가능성 I가 버그 185 개 기회 관련된 프로그램의 자동 테스트 우리의 영상으로부터 결정된 1/12 및 1/20 (사이의 확률로 발생 발생 패턴은 식별되지 않음). 나는 이런 버그를 다룰 필요가 없었기 때문에, 버그의 명백한 무작위성과 수정 사항을보고 무슨 일이 일어 났는지 궁금합니다. Windows에서 "높은 DPI"를 위해 업 스케일링 한 비트 맵 렌더링과 툴바를 배치하는 기능 간의 경쟁 조건은 무엇입니까?
내가 생각하기에 * 첫 단락에서이 점을 이해하고 있지만 - EXE 자체의 바로 가기 또는 "속성"에 호환성 플래그를 사용하고 있습니다 (레지스트리에서 설정 됨).) DPI 인식을 사용하지 않으려면 SetProcessDPIAwareness가 설정 되었기 때문에 호출되는 것으로 생각합니까? 매니페스트는 향후 버전에서 제공 될 예정이지만, 불행히도 다음 버전은 아마 오래 될 것입니다. –
아닙니다. 속성에서 크기 조절을 사용하지 않아도 SetProcessDPIAwareness는 호출되지 않지만 비슷한 효과가 있습니다. 스케일링을 수동으로 비활성화하면 항상 작동하는 것으로 보이기 때문에 코드가 높은 DPI를 이해할 수 있도록 작성된 것 같습니다. 때로는 스케일링을 비활성화하지 않을 때 작동하기 때문에 프로그램에서 DPI를 인식하도록 (SetProcessDPIAware 또는 SetProcessDPIAwareness를 호출하여) OS에 알려주려고하지만 모든 스레드 (Windows 10이 변경됨)에 적용되지 않았거나 경쟁 조건 (때로는 OS에 너무 늦게 알려줍니다). –
응용 프로그램의 코드가 확실히 High DPI를 이해하지 못하거나 완전히 이해하고 있지만 모든 GUI 요소가 표준 Win32이므로 어떤 일이 발생하는지 모릅니다. 우리는 또한 Win 7과 Win 10 사이의 OS에서 실행하지 않았으므로 OS 버전이 버그를 표시하지 않도록 할 수 있습니다 (7은 그렇지 않으면 10을 제외하고). 높은 DPI가 문제가되는 다른 이유 중 하나는 자동 테스트가 메뉴 모음과 상호 작용하려고 할 때 잘못된 위치에서 클릭하기 시작했기 때문입니다. 현재 경쟁 상태가 더 신뢰할 수있는 것처럼 보입니다. –