Программно установить DPI из. Win 2.0 приложения .net 2.0 - PullRequest
0 голосов
/ 26 мая 2010

Я хочу запустить свое приложение на 96dpi , независимо от того, какой размер dpi для Windows установлен. Это возможно?

' Редактировать ' Я обнаружил, что использование метода Scale () и изменение размера шрифта почти сработают.

public class MyForm : Form
{
    private static bool ScaleDetected = false;
    const float DPI = 80F;

    protected override void OnPaint(PaintEventArgs e)
    {
        base.OnPaint(e);

        if (!ScaleDetected)
        {
            Graphics g = e.Graphics;
            float factorX = DPI / g.DpiX;
            float factorY = DPI / g.DpiY;

            SizeF newSize = new SizeF(factorX, factorY);

            AutoScaleDimensions = newSize;
            AutoScaleMode = AutoScaleMode.Dpi;

            Scale(newSize);
            Font = new Font(Font.FontFamily, Font.Size * factorX);

            ScaleDetected = true;
        }
    }
}

альтернативный текст http://i48.tinypic.com/2vmhf2b.png

Однако при использовании этого «трюка» в приложении MDI с использованием элементов управления Janus размер основной формы изменяется, но для некоторых других форм масштабирование + измененный шрифт не применяются.

Ответы [ 2 ]

1 голос
/ 26 мая 2010

Если я правильно понимаю, вы хотите отключить автоматическое масштабирование DPI. Если это так, я думаю, что вам просто нужно позвонить SetProcessDPIAware, чтобы сообщить Windows, что вы сами справитесь.

Смотрите эту ссылку, чтобы узнать, как позвонить из C # / VB.Net:
http://www.pinvoke.net/default.aspx/user32/setprocessdpiaware.html

0 голосов
/ 02 ноября 2010

Вы должны установить AutoScaleMode на AutoScaleMode.None, чтобы предотвратить автоматическое масштабирование

...