相关疑难解决方法(0)

如何配置应用程序以在具有高DPI设置(例如150%)的计算机上正确运行?

我在C#中创建了一个简单的Winforms应用程序.当我在具有高DPI设置(例如150%)的计算机上运行应用程序时,应用程序会按比例放大.到现在为止还挺好!但是,不是使用更高的字体大小渲染字体,所有文本也只是按比例放大.这当然导致非常模糊的文本(在按钮等所有控件上).

窗户不应该正确地渲染文本吗?例如,我的应用程序的标题栏呈现清晰明了.

c# fonts dpi winforms dpi-aware

86
推荐指数
4
解决办法
4万
查看次数

在c#中更改"覆盖高DPI缩放行为"

我们在WinForm(CefSharp控件)中有一个控件,当用户屏幕在Windows上设置为125%时,它会受到图形工件的影响.它不仅仅是控制,独立Chrome在某种程度上做到了.我们能够修复工件的唯一方法是更改​​下图所示的exe设置.有没有办法在代码中更改它?

在此输入图像描述

编辑:这不是重复.制作应用程序DPI意识与DPI缩放不一样

c# registry dpi cefsharp

10
推荐指数
1
解决办法
1994
查看次数

在我创建WPF窗口时,Windows窗体窗口会更改其大小

我有一个System.Window.Forms.Form处理每个按钮点击的地方.当我收到第一个事件时,我创建了一个新的WPF System.Windows.Window对象.

class WPF_Window : Window
{
}


public partial class Form1 : Form
{
    WPF_Window wnd = null;

    public Form1()
    {
        InitializeComponent();
    }

    private void Form1_MouseClick(object sender, MouseEventArgs e)
    {
        if (wnd == null)
        {
            wnd = new WPF_Window();
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

在我的计算机上,此代码按预期工作,但如果我在另一台计算机(Windows 10)上运行它,当我单击Windows窗体窗口时更改其大小(减小其尺寸).

这怎么可能?我该如何避免这种行为?

c# wpf interop resize winforms

6
推荐指数
1
解决办法
1466
查看次数

如何在 C# 程序中获取任务栏通知区域宽度?

我正在 C# Winforms 应用程序中开发一个功能,它需要确定任务栏的 Windows“通知区域”的宽度(特别是当停靠在屏幕底部的默认位置时)。

为了提供更好的上下文,程序显示小的、瞬态的、无边界的窗口(类似于工具提示),我们希望确保通知区域“系统托盘”图标和时钟永远不会被这些窗口之一覆盖。

下面是我想要获得的宽度的屏幕截图(来自 Windows 10),以及它的用途:

任务栏通知区域需要的宽度尺寸,以及使用说明

到目前为止,我已经探索了 .Net 框架,并研究了 Win32 API 调用,但是我无法确定任何潜在的解决方案(也无法确定这是否确实可行)。

任何建议将不胜感激。理想情况下,解决方案最早可与 Windows 7 兼容,但这并不是绝对要求。

.net c# winapi winforms

6
推荐指数
1
解决办法
1268
查看次数

用于GetWindowDpiAwarenessContext的C#Pinvoke

我试图在C#应用程序中实现GetWindowDpiAwarenessContext,但没有成功。

relevent头文件是:

windef.h

DECLARE_HANDLE(DPI_AWARENESS_CONTEXT);

typedef enum DPI_AWARENESS {
    DPI_AWARENESS_INVALID           = -1,
    DPI_AWARENESS_UNAWARE           = 0,
    DPI_AWARENESS_SYSTEM_AWARE      = 1,
    DPI_AWARENESS_PER_MONITOR_AWARE = 2
} DPI_AWARENESS;

#define DPI_AWARENESS_CONTEXT_UNAWARE              ((DPI_AWARENESS_CONTEXT)-1)
#define DPI_AWARENESS_CONTEXT_SYSTEM_AWARE         ((DPI_AWARENESS_CONTEXT)-2)
#define DPI_AWARENESS_CONTEXT_PER_MONITOR_AWARE    ((DPI_AWARENESS_CONTEXT)-3)
#define DPI_AWARENESS_CONTEXT_PER_MONITOR_AWARE_V2 ((DPI_AWARENESS_CONTEXT)-4)
Run Code Online (Sandbox Code Playgroud)

WinUser.h

WINUSERAPI
DPI_AWARENESS_CONTEXT
WINAPI
GetWindowDpiAwarenessContext(
    _In_ HWND hwnd);
Run Code Online (Sandbox Code Playgroud)

我在用:

/// <summary>
/// Class for native methods.
/// </summary>
internal static class NativeMethods {

[DllImport("user32.dll")]
internal static extern IntPtr GetWindowDpiAwarenessContext(IntPtr hWnd);

...

            // Dpi awareness context
            IntPtr dpiAwarenessContext = NativeMethods.GetWindowDpiAwarenessContext(process.Handle);
            if (dpiAwarenessContext == (IntPtr)(-1)) {
                sb.AppendLine("  DPI …
Run Code Online (Sandbox Code Playgroud)

c# pinvoke dpi

3
推荐指数
1
解决办法
695
查看次数

C# 屏幕截图全窗口

我正在尝试使用 .NET Framework 编写一个控制台应用程序。我想截图我的屏幕。我已经使用过其他答案,如下所示:

/sf/answers/1741565801/

问题是这并不能捕获我的整个屏幕。底部和右侧大约缺失 1/5。

如何使用 C# .NET Framework 捕获整个屏幕?

.net c# console-application

3
推荐指数
1
解决办法
8418
查看次数

WPF ClickOnce DPI感知每个监视器v2

我将设置此问题并亲自回答,以便其他人可以轻松地搜索并找到正确的答案。我不得不谷歌搜索几个小时,并从多个来源汇编最终结果...

因此,问题是- 如何在ClickOnce场景(特别是WPF,特别是c#)中启用Per-Monitor v2 DPI感知?

在Win 10 Creators Update(1703)中添加了Per-monitor v2。众所周知,ClickOnce不支持在app.manifest文件中声明的DPI感知,例如

c# wpf clickonce dpi

2
推荐指数
2
解决办法
1883
查看次数