慢羊羊的空间

无为,无我,无欲,居下,清虚,自然

创建一个不受系统缩放设置(DPI)影响的绘图窗口

现在的屏幕分辨率都比较高,为了使屏幕字体不至于太小,通常在 Win10 的显示设置里面设为放大 125% 或 150% 或更大,这样就会导致像素实际上被放大了。

如果你的程序不希望受系统缩放设置影响,你需要使用一个新的 API 函数:SetProcessDpiAwareness

注意这个 API 函数的使用条件:

  • Win8.1 及以上版本
  • 头文件 ShellScalingApi.h
  • 库文件 Shcore.lib

以下是一个完整的范例程序,该范例创建一个不受系统缩放设置影响的绘图窗口,并画一个圆:

// 编译环境:Win10 + VS2019 + EasyX_20200727
//

// 设定操作系统版本为 Win10
#define WINVER 0x0A00
#define _WIN32_WINNT 0x0A00

#include <graphics.h>
#include <conio.h>
#include <ShellScalingApi.h>		// 引用头文件
#pragma comment(lib, "Shcore.lib")	// 链接库文件

int main()
{
	// 设置该进程不受系统 DPI 设置影响
	SetProcessDpiAwareness(PROCESS_PER_MONITOR_DPI_AWARE);

	// 创建图形窗口,并画一个圆
	initgraph(640, 480);
	circle(320, 240, 200);

	// 按任意键关闭绘图窗口
	_getch();
	closegraph();
	return 0;
}

关于 SetProcessDpiAwareness 函数更详细的使用方法,请参考微软官方文档:SetProcessDpiAwareness function

分享到