日期:2014-05-17  浏览次数:20926 次

100分求问!!winform编写的窗口程序,如何在win7下忽略高DPI设置,不跟随其放大放大?
本帖最后由 yuzhenhao 于 2013-03-13 10:41:03 编辑
winform编写的窗口程序,本来可以正常显示。
当win7用户调整了DPI,也即在设置里进行了显示放大,界面就乱套了。


现在请问,winform编写的程序,如何能忽略该设置,不随其放大而变化?

------解决方案--------------------
我之前也遇到过,没解决。、帮顶~~~~~~~~~~~~
------解决方案--------------------
我刚试了下.所有程序都变了.有些问题还是随大流的好.
------解决方案--------------------
以前遇到过,好在设备都是自己的,可以自己设置,就没再去深究。

不知道能不能修改下设置尺寸的度量单位。
记得以前做网页的时候,文字大小的单位有一个是像素。
设置成其他单位时,则根据浏览器的设置显示大小不一样。
------解决方案--------------------
可以尝试下TableLayoutPanel,把控件放到格子里。
------解决方案--------------------
DPI适应处理方式:
1.所有设置了BackgroundImage的控件背景图 BackgroundImageLayout 属性设置为Stretch
2.窗体打开后获取DPI系数

private void Form1_Load(object sender, EventArgs e)
        {
            //获取系统DPI
            try
            {
                SetProcessDPIAware();  //重要
                IntPtr screenDC = GetDC(IntPtr.Zero);
                int dpi_x = GetDeviceCaps(screenDC, /*DeviceCap.*/LOGPIXELSX);
                int dpi_y = GetDeviceCaps(screenDC, /*DeviceCap.*/LOGPIXELSY);
                CommonInfo.scaleUIX = dpi_x / 96.0;//横向系数
                CommonInfo.scaleUIY = dpi_y / 96.0;//纵向系数
                ReleaseDC(IntPtr.Zero, screenDC);
            }
            catch (Exception)
            {
                //throw;
                //没有管理员权限就获取不到了
            }
        }
/*----------------------------------------获取系统DPI-----------------------------------------------------*/
        [DllImport("user32.dll")]
        static extern IntPtr GetDC(IntPtr ptr);

        [DllImport("user32.dll", EntryPoint = "ReleaseDC")]
        public static extern IntPtr ReleaseDC(IntPtr hWnd, IntPtr hDc);

        [DllImport("gdi32.dll")]
        public static ext