我在C#中创建了一个简单的Winforms应用程序.当我在具有高DPI设置(例如150%)的计算机上运行应用程序时,应用程序会按比例放大.到现在为止还挺好!但是,不是使用更高的字体大小渲染字体,所有文本也只是按比例放大.这当然导致非常模糊的文本(在按钮等所有控件上).
窗户不应该正确地渲染文本吗?例如,我的应用程序的标题栏呈现清晰明了.
我们在WinForm(CefSharp控件)中有一个控件,当用户屏幕在Windows上设置为125%时,它会受到图形工件的影响.它不仅仅是控制,独立Chrome在某种程度上做到了.我们能够修复工件的唯一方法是更改下图所示的exe设置.有没有办法在代码中更改它?
编辑:这不是重复.制作应用程序DPI意识与DPI缩放不一样
我有一个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# Winforms 应用程序中开发一个功能,它需要确定任务栏的 Windows“通知区域”的宽度(特别是当停靠在屏幕底部的默认位置时)。
为了提供更好的上下文,程序显示小的、瞬态的、无边界的窗口(类似于工具提示),我们希望确保通知区域“系统托盘”图标和时钟永远不会被这些窗口之一覆盖。
下面是我想要获得的宽度的屏幕截图(来自 Windows 10),以及它的用途:
到目前为止,我已经探索了 .Net 框架,并研究了 Win32 API 调用,但是我无法确定任何潜在的解决方案(也无法确定这是否确实可行)。
任何建议将不胜感激。理想情况下,解决方案最早可与 Windows 7 兼容,但这并不是绝对要求。
我试图在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) 我正在尝试使用 .NET Framework 编写一个控制台应用程序。我想截图我的屏幕。我已经使用过其他答案,如下所示:
问题是这并不能捕获我的整个屏幕。底部和右侧大约缺失 1/5。
如何使用 C# .NET Framework 捕获整个屏幕?
我将设置此问题并亲自回答,以便其他人可以轻松地搜索并找到正确的答案。我不得不谷歌搜索几个小时,并从多个来源汇编最终结果...
因此,问题是- 如何在ClickOnce场景(特别是WPF,特别是c#)中启用Per-Monitor v2 DPI感知?
在Win 10 Creators Update(1703)中添加了Per-monitor v2。众所周知,ClickOnce不支持在app.manifest文件中声明的DPI感知,例如。