WinForms .NET 5을 위해 High DPI 리본 만들기
페이지 정보
작성자 GrapeCity 작성일 2021-04-09 14:25 조회 5,371회 댓글 0건본문
관련링크
ComponentOne 2020v3 릴리스에서는 가장 수요가 많은 ComponentOne 컨트롤을 .NET 5 프레임워크에 도입하는 데 초점을 맞추었고, WinForms Edition에 흥미로운 새 기능을 추가하였습니다.
그러한 기능 중 하나는 C1Icon에 기반을 둔 C1Ribbon의 High DPI 지원입니다.
C1Ribbon: High DPI 지원
새로운 C1Ribbon 컨트롤은 다양한 요소 상태 또는 다양한 요소 크기의 개별 리본 요소에 표시되어야 하는 아이콘을 C1Icon 개체 집합을 사용해 정의합니다. 예를 들어 16x16의 요소 크기에 대해서는 작은 기호 아이콘을, 32x32 요소 크기에 대해서는 더 큰 png 이미지를 지정할 수 있습니다. 또한 다양한 크기의 큰 이미지가 필요할 수 있는 High DPI 모드에서 사용할 벡터 아이콘(선택 사항)을 지정할 수 있습니다.
C1Icon은 색조 및 크기를 조정할 수 있는 단색 아이콘을 지정할 수 있게 해주는 일련의 클래스입니다. 이러한 아이콘은 컨트롤에서 내부적으로 사용되는 것으로 간주되며 고객이 컨트롤의 API를 통해 다양한 아이콘을 지정할 수 있게 해줍니다. 가능한 소스는 글꼴, 벡터(경로 또는 SVG) 및 이미지입니다.
최신 릴리스에서는 고해상도 DPI 모니터에 대한 지원이 현재 WinForms용 C1Ribbon의 일부로 기본 제공됩니다. High DPI를 지원하므로 이제 C1Ribbon을 사용해 품질 손실 없이 High DPI 장치에서 볼 수 있는 WinForms 응용 프로그램을 개발할 수 있습니다.
따라서 배율 설정이 100%가 아닌 시스템에서 응용 프로그램이 실행되는 경우 적절히 배율이 조정됩니다.
High DPI 지원 |
High DPI 지원 안함 |
DPI 및 디스플레이 배율 계수
인치 당 도트 수(DPI)는 기술적으로 인치당 프린터 도트 수를 뜻하는 공간 인쇄의 단위입니다. 특히 폭이 1인치 이내인 선에 배치할 수 있는 개별 도트의 수를 가리킵니다.
대부분의 레거시 데스크톱 UI 프레임워크에는 디스플레이 DPI가 프로세스 수명 중에는 변경되지 않을 것이라는 가정이 기본적으로 깔려 있습니다. 하지만 각 디스플레이가 서로 다른 배율 계수를 가지고 원격 데스크톱을 통해 High DPI 랩톱/태블릿에서 Low DPI 장치 등에 접속하는 다중 모니터 설정과 같은 시나리오에서는 디스플레이 DPI가 변경되는 일이 흔하므로 이러한 가정은 더 이상 유효하지 않습니다.
이러한 시나리오에서는 DPI 배율 조정이 완료되지 않으면 응용 프로그램이 흐릿하게 보이거나 크기가 부정확해집니다.
배율 조정 활성화
배율 조정을 활성화하려면 응용 프로그램을 DPI 인식으로 선언하기만 하면 됩니다. 그러면 C1Ribbon이 현재 DPI 설정에 따라 UI 요소의 크기를 자동으로 조정합니다.
대상으로 지정된 .NET 프레임워크에 따라 두 가지 이상의 방법으로 배율 조정을 활성화/비활성화할 수 있습니다.
대상 프레임워크가 .NET v4.7 이상이고 Windows 10 Creators Update로 시작하는 Windows 운영 체제에서 이 프레임워크를 실행하는 경우 몇 줄의 코드로 app.manifest 파일 및/또는 app.config 파일을 추가해야 합니다. 이에 관해서는 에 자세히 설명되어 있습니다.
하지만 대상 프레임워크가 .NET Core 3.0 이상인 경우에는 app.manifest 및 app.config 파일이 필요 없습니다. .NET Core 3.0부터 Microsoft는 Windows Forms에 대해 High DPI 모드를 설정할 수 있는 새로운 방법을 도입하였습니다. Application.SetHighDpiMode(HighDpiMode)라고 하는 정적 메서드가 그것입니다. 이 메서드에서 HighDpiMode는 열거이며 DpiUnaware, SystemAware, PerMonitor, PerMonitorV2, DpiUnawareGdiScaled라는 값을 갖습니다.
Application.SetHighDpiMode(HighDpiMode.PerMonitorV2);
DPI 인식 모드
DPI 인식 모드는 고해상도 화면에 표시될 때 응용 프로그램이 표시되는 방식을 지정합니다.
DPI 인식: 활성화됨 | DPI 인식: 비활성화됨 |
아래 표에서는 ‘HighDpiMode’ 열거에 사용할 수 있는 다양한 값을 공유합니다.
항목 | 값 | 설명 |
---|---|---|
DpiUnaware | 0 | 응용 프로그램 창이 DPI 변경에 맞게 배율 조정되지 않고 항상 100%의 배율 계수를 유지합니다. |
DpiUnawareGdiScaled | 4 | DpiUnaware와 유사하지만 GDI/GDI+ 기반 콘텐츠의 질을 높입니다. |
PerMonitor | 2 | 창은 생성되는 시점에 DPI를 확인하고 DPI가 변경되면 배율 계수를 조정합니다. |
PerMonitorV2 | 3 | PerMonitor와 유사하지만 하위 창 DPI 변경 알림을 활성화하고, comctl32 컨트롤의 배율 조정을 개선하였고, 대화 상자 배율 조정이 가능합니다. |
SystemAware | 1 | 창은 기본 모니터의 DPI에 대해 쿼리를 1회 수행하여 이 DPI를 모든 모니터의 응용 프로그램에 사용합니다. |
결론
DPI 배율 조정이 필요 없는 수준부터 배율 조정이 점점 더 중요하게 된 수준까지 디스플레이 기술이 발전함에 따라 수천 개의 응용 프로그램이 WinForms를 사용해 작성되었고, WinForms 기술은 계속 발전해 왔습니다. 따라서 현재 WinForms는 양질의 High DPI 지원을 제공하고 있으며, C1Ribbon을 이용해 최신 Microsoft Office 2019 스타일 응용 프로그램을 원활하게 작성할 수 있습니다.
댓글목록
등록된 댓글이 없습니다.