powered by simpleCommunicator - 2.0.28     © 2024 Programmizd 02
Map
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Использование класса GlyphTypeface в проекте WinForms приводит к изменению разрешения форм
10 сообщений из 10, страница 1 из 1
Использование класса GlyphTypeface в проекте WinForms приводит к изменению разрешения форм
    #40107264
YK13
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день уважаемое сообщество
Вот столкнулся с проблемой. В приложении WinForms мне необходимо использовать объект типа GlyphTypeface из пространства имен System.Windows.Media
Как только я инициализирую объект данного типа или объект в котором данный тип является generic параметром (Array, List etc..) Разрешение объекта Graphics, рисующего форму изменяется с 96DPI на 120DPI. И форма визуально изменяется в размере. В приложениях WPF такого не присходит.
Может быть кто нибудь из Вас сталкивался с этой проблемой и знает как ее решить. Буду очень рад любому совету и подсказке.
С уважением ко всем участникам форума
...
Рейтинг: 0 / 0
Использование класса GlyphTypeface в проекте WinForms приводит к изменению разрешения форм
    #40107313
Roman Mejtes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
YK13,

подробнее опишите, на чем рисуете полученное изображение, через что вы Geometry перегоняете в Bitmap? через DrawImage? или через ContentHost?
...
Рейтинг: 0 / 0
Использование класса GlyphTypeface в проекте WinForms приводит к изменению разрешения форм
    #40107398
YK13
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
авторподробнее опишите, на чем рисуете полученное изображение, через что вы Geometry перегоняете в Bitmap? через DrawImage? или через ContentHost?

Я ничего не рисую. У меня есть класс, который наследует System.Windows.Forms.Form Просто при переопределении метода OnPaint в этом класс или в обработчике события Paint вы можете увидеть значение DPI у объекта Graphichs
Привожу код, если я не очень доступно объяснил
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
        private void button1_Click(object sender, EventArgs e)
        {
            GlyphTypeface gtf = new GlyphTypeface();
            //Какая то бизнес логика
        }

        protected override void OnPaint(PaintEventArgs e)
        {
            ////Метод переопределен только для того, чтобы показать, что значение dpi изменилось
            ///При вызове этого метода до клика на кнопку значения dpi равны 96
            ///форма нормально отрисовывается
            ///при вызове после клика на кнопку значения dpi равны 120 и форма визуально меняется в размере
            float dpiX = e.Graphics.DpiX;
            float dpiY = e.Graphics.DpiY;
            base.OnPaint(e);
         }
...
Рейтинг: 0 / 0
Использование класса GlyphTypeface в проекте WinForms приводит к изменению разрешения форм
    #40107480
_дух_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
YK13,

Namespace: System.Windows.Media
Assembly: PresentationCore.dll

Я предполжу что этим инициализируется WPF из WinForm
...
Рейтинг: 0 / 0
Использование класса GlyphTypeface в проекте WinForms приводит к изменению разрешения форм
    #40107553
YK13
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
авторЯ предполжу что этим инициализируется WPF из WinForm
То есть, Вы имеете ввиду, что инициализация WPF изменяет разрешение. В соответствии с Вашим предположением, попробовал инициализировать в обработчике кнопки объект какого либо другого типа из пространства имен System.Windows.Media. В частности System.Windows.Media.CharacterMetrics - такой же эффект. Вопрос в другом как с этим жить? Можно ли как то использовать WPF объекты в WinForm без вышеописанного эффекта?
...
Рейтинг: 0 / 0
Использование класса GlyphTypeface в проекте WinForms приводит к изменению разрешения форм
    #40107554
Roman Mejtes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
YK13,
ну идея юзать WPF в WF всегда была не очень. это только верхушка айсберга проблем, но довольно серьезная из всех тех проблем, что приходилось решать при интеграции WPF в WF. проще создать окно WPF и засунуть туда WF...
...
Рейтинг: 0 / 0
Использование класса GlyphTypeface в проекте WinForms приводит к изменению разрешения форм
    #40107618
Сон Веры Павловны
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
YK13
Привожу код, если я не очень доступно объяснил

Воспроизвел это у себя именно в приведённом варианте - DPI не поменялся (.Net 4.8, AnyCPU, Win10 Pro x64 1909):
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
public partial class Form1 : Form
{
  public Form1()
  {
    InitializeComponent();
  }

  void button1_Click(object sender, EventArgs e)
  {
    var gtf = new GlyphTypeface();
    Console.WriteLine("GTF: {0}",gtf);
  }

  protected override void OnPaint(PaintEventArgs e)
  {
    Console.WriteLine("{0}/{1}", e.Graphics.DpiX, e.Graphics.DpiY);
    base.OnPaint(e);
  }
}


и есть подозрение, что причиной вышеописанного поведения является та самая
Код: c#
1.
//Какая то бизнес логика



Roman Mejtes
роще создать окно WPF и засунуть туда WF

Тоже не очень. Мне доводилось как-то хостить винформсовский ReportViewer в WPF-ном окне (т.к. для WPF аналог отсутствует в принципе) - начинаются всякие мелькания и артефакты отрисовки при ресайзе/перемещении окна, чего-то начинает на ровном месте просвечивать сквозь него, хотя окно непрозрачное, итд итп. Что винформс в WPF, что наоборот - оно как вставная челюсть, как-то работает, но родное решение лучше.
...
Рейтинг: 0 / 0
Использование класса GlyphTypeface в проекте WinForms приводит к изменению разрешения форм
    #40107626
_дух_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
YK13,

сколько мониторов, какое разрешение, какое скалирование?
...
Рейтинг: 0 / 0
Использование класса GlyphTypeface в проекте WinForms приводит к изменению разрешения форм
    #40107727
YK13
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Сон Веры Павловныи есть подозрение, что причиной вышеописанного поведения является та самая
YK13//Какая то бизнес логика



Увы, нет. Эффект происходит даже если далее нет никакой бизнес логики

Пробовал, на разных машинах. И WinPro и WinHome с разным количеством мониторов - эффект присутствовал.
Говорю "присутствовал" потому что сейчас пробую на машине WinPro, на которой еще вчера тестировал это, когда писал этот пост. Вчера всё было, причем проблема обнаружилась уже давно (с самого начала использования класса GlyphTypeface - еще несколько месяцев назад)
Но сейчас никакого эффекта. Попробую вечером на другой машине
Странно. Вроде бы нигде не было каких либо апдейтов за последние сутки. Вообще не нахожу этому какого либо объяснения
...
Рейтинг: 0 / 0
Использование класса GlyphTypeface в проекте WinForms приводит к изменению разрешения форм
    #40107861
YK13
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Нашел в чем проблема. Как оказалось все зависит от настроек дисплея в Windows. Параметры>Система>Дисплей Если значение настройки "Изменение размероа текста приложений и других элементов" больше 100% тогда появляется описываемый в этом посте эффект. Но как это побороть не знаю. Пробовал поиграть со значением AutoScaleMode (по умолчанию стоит System.Windows.Forms.AutoScaleMode.Font)
Не помогло
...
Рейтинг: 0 / 0
10 сообщений из 10, страница 1 из 1
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Использование класса GlyphTypeface в проекте WinForms приводит к изменению разрешения форм
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]