Win32 C++中Toast通知图片尺寸与DPI缩放问题咨询
Toast通知图片缩放与DPI适配问题解答
一、图片自动缩放与尺寸匹配规则
1. 非DPI感知应用
- 系统会自动缩放你指定的48x48 appLogoOverride图片,但因为应用未声明DPI感知,系统会默认以**96 DPI(100%缩放比例)**为基准进行缩放,在高DPI屏幕下容易出现模糊。
- 不支持通过命名规则匹配不同尺寸的图片,系统只会使用你指定的单张图片进行缩放处理。
2. DPI感知应用
- 系统会根据当前屏幕的实际DPI值自动缩放48x48的图片,保证显示清晰度。
- 支持通过资源命名规则匹配对应尺寸的图片:比如你提供
appLogo.scale-150.png(对应150%缩放)、appLogo.scale-200.png等命名的资源文件,系统会自动根据当前DPI选择最匹配的版本,无需手动指定具体文件。
二、非DPI感知应用获取实际DPI值的方法
如果需要手动处理图片缩放,可通过以下Win32 API获取目标屏幕的实际DPI:
- 使用
GetDpiForWindow(需Windows 10 1607及以上版本):传入应用窗口句柄,直接获取该窗口所在显示器的DPI值。示例代码:
HWND hWnd = /* 你的应用窗口句柄 */; UINT dpi = GetDpiForWindow(hWnd);
- 若没有窗口句柄,可使用
GetDpiForMonitor:先获取目标显示器句柄,再读取对应DPI。示例代码:
HMONITOR hMonitor = MonitorFromWindow(NULL, MONITOR_DEFAULTTOPRIMARY); UINT dpiX, dpiY; GetDpiForMonitor(hMonitor, MDT_EFFECTIVE_DPI, &dpiX, &dpiY); // dpiX与dpiY通常相等,即为当前显示器的实际DPI
内容的提问来源于stack exchange,提问作者user3161924
相关产品推荐
相关产品推荐

