이전 시스템에서는 훌륭하게 작동하는 WinForms 응용 프로그램이 있지만 4k 모니터에서보기 좋게 만드는 데 문제가 있습니다. 여러 가지 문제가 있으며 주제에 대해 많이 쓰여 있지만이 문제는 특정 문제에 초점을 맞 춥니 다. 같은 폰트를 사용하기 위해 다른 컨트롤을 설정할 수 있지만, 높은 DPI 시스템에서는 컨트롤이 많이 달라집니다. 이 문제를 어떻게 해결할 수 있습니까?동일한 글꼴이 높은 DPI 모니터에서 동일하게 보이지 않음
필자는 글꼴 크기를 변경하고 컨트롤을 움직일 수 있습니다.하지만 Windows는 글꼴 크기에 신비로운 요소를 추가하고 있습니다. Windows가 무엇을하고 있는지 알지 못하면이를 취소 할 수 없습니다! 이전 시스템에서
내 검사 창은 완벽한 외모 : 나 '
:
높은 DPI 시스템에서은, 일부 컨트롤은 다른 사람보다 다른 글꼴 크기가 양식에서 상속하는 것이 아니라 일부 컨트롤에서 글꼴을 수동으로 설정하는 것을 포함하여 여러 가지를 시도했습니다. 이 포함 해결하기 위해 나는 몇 가지를 시도했습니다 인터넷을 검색 한 후
: 당신이 볼 수 있듯이, 글꼴을 변경하면 문제가 해결되지 않은
- PROCESS_DPI_UNAWARE 사이에 응용 프로그램을 변경, PROCESS_SYSTEM_DPI_AWARE 및 PROCESS_PER_MONITOR_DPI_AWARE
- 양식의 글꼴을 사용하는 대신 명시 적으로 changing the font입니다.
- 높은 DPI 시스템의 건물과 기존 시스템을 비교합니다.
- 동일한 컴퓨터에서 192 DPI/200 %로 설정된 모니터에서 건물을 96 DPI/100 %로 설정 한 모니터에 건물.
- Visual Studio의 디자이너에서 양식을 빌드하는 것과 순수한 C# 코드로 작성하는 것. 비주얼 스튜디오 2015
대
단계 반복 :
- 이 형태의 많은에 컨트롤이 많이 발생합니다. 작고 간단한 데모는 아래 코드 샘플을 참조하십시오. 그것이 위의 스크린 샷을 얻은 방법입니다.
하나의 시스템 설정으로이 문제가 나타나거나 사라질 수 있습니다. 주 모니터를 96 DPI/100 % 배율로 변경 한 경우 을 다시 부팅 한 다음을 재부팅하면 모든 글꼴이 요청 된대로 좋은 결과를 얻게됩니다. 주 모니터를 다른 DPI 설정 인 으로 변경 한 다음을 재부팅하면 잘못된 결과가 표시됩니다.
private void newFormButton_Click(object sender, EventArgs e) { Font copyOfFont = new Font(Font, FontStyle.Strikeout); Form form = new Form(); form.Font = Font; string sample = "Abc 123 :)"; int padding = 6; Label label = new Label(); label.Text = sample; label.Top = padding; label.Left = padding; label.Font = copyOfFont; label.Parent = form; Button button = new Button(); button.Text = sample; button.Top = label.Bottom + padding; button.Left = padding; button.Width = label.Width + padding * 2; button.Height = label.Height + padding * 2; button.Parent = form; TextBox textBox = new TextBox(); textBox.Text = sample; textBox.Size = button.Size; textBox.Top = button.Bottom + padding; textBox.Left = padding; textBox.Parent = form; ListBox listBox = new ListBox(); listBox.Items.Add(sample); listBox.Items.Add(sample); listBox.Width = button.Width; listBox.Height = button.Height * 2; listBox.Top = textBox.Bottom + padding; listBox.Left = padding; listBox.Font = copyOfFont; listBox.Parent = form; form.Show(); }
텍스트 상자의 글꼴 크기가 HiDPI 예제의 레이블과 다른 것을 말하는가? – kristianp
예, 텍스트 상자와 목록 상자에는 글꼴 크기가 하나 있으며 단추와 레이블의 글꼴 크기가 다릅니다. 그들은 모두 같은 크기 여야합니다. –