|
本帖最后由 什么叫易 于 2021-3-2 16:08 编辑
变量名 | 类 型 | 静态 | 数组 | 备 注 | DPI | 整数型 | | | Rect | RECT | | |
DPI = GetDpiForWindow (hwnd )GetWindowRect (hwnd, Rect )Rect.left = MulDiv (Rect.left, DPI, 96 )Rect.top = MulDiv (Rect.top, DPI, 96 )Rect.right = MulDiv (Rect.right, DPI, 96 )Rect.bottom = MulDiv (Rect.bottom, DPI, 96 )返回 (Rect )变量名 | 类 型 | 静态 | 数组 | 备 注 | DPI | 整数型 | | | hdc | 整数型 | | | Rect | RECT | | |
hdc = GetDC (hwnd )GetWindowRect (hwnd, Rect ) DPI = GetDeviceCaps (hdc, 90 )ReleaseDC (hwnd, hdc )Rect.left = MulDiv (Rect.left, DPI, 96 )Rect.top = MulDiv (Rect.top, DPI, 96 )Rect.right = MulDiv (Rect.right, DPI, 96 )Rect.bottom = MulDiv (Rect.bottom, DPI, 96 )返回 (Rect )
适应窗口DPI的获取窗口矩形。
还有就是所有调用本身getWindowRect,或者getClientRect,以及GetWIndowInfo 相关的函数,都应该进行转换,由于Windows 10, version 1607以前GetDpiForWindow 并未创建或公开,所以有了第二个方法,可以使用动态调用,调用失败自动换成GetDC这种方式。之前方向错了,很多新API的文档都没有补齐,例如GetWindowDpiAwarenessContext并不是返回文档对应的-1,-2,-3,-4。而是0,18,34,24592,61457。跟比如LogicalToPhysicalPointForPerMonitorDpi调用始终返回false。新功能确实不用加,但旧的就得更改。现在win10窗口连控件都可以重写DPI,所以改了吧。我都这不自己写了。另外,有没有考虑在node平台添加精易模块。https://github.com/wwog/win-api-addon 这是我目前的库,为了使用electron开发。但我觉得像火山都出了,都是写C++模块,其实和写火山没区别。可以共同开发。
|
评分
-
查看全部评分
|