注册

CpuDbg x96

查看: 605|回复: 0
收起左侧

当自绘遇到DPI不是100%时

[复制链接]
发表于 2024-7-31 07:31:21 | 显示全部楼层 |阅读模式
图像每英寸长度内的像素点数。
DPI(Dots Per Inch,每英寸点数)是一个量度单位,用于点阵数码影像,指每一英寸长度中,取样、可显示或输出点的数目。
DPI是打印机、鼠标等设备分辨率的度量单位。是衡量打印机打印精度的主要参数之一,一般来说,DPI值越高,表明打印机的打印精度越高。
DPI是指每英寸的像素,也就是扫描精度。DPI越低,扫描的清晰度越低,由于受网络传输速度的影响,
web上使用的图片都是72dpi,但是冲洗照片不能使用这个参数,必须是300dpi或者更高350dpi。

例如要冲洗4*6英寸的照片,扫描精度必须是300dpi,那么文件尺寸应该是(4*300)*(6*300)=1200像素*1800像素。

以上是摘自百度百科.
----------------------------------------------------------------------------------------------------------------------------------------------------------------
在过去我们使用调试器都是正常显示的, 但不知从何时开始有的时候使用调试器字体会显示的特别小. 原来是因为现在的屏幕越来越大导致的.
默认情况下, 像素高了, DPI如果还是 100%, 那屏幕上的字就会非常小. 想要解决,只能把像素调低了, 或者把DPI调高.
当把DPI调高之后, 有不少自绘的软件如果没有处理DPI的问题, 显示的字体或者绘制的按钮等, 就会显的特别特别的小.(屏幕越大字越小.)
cpudbg就没有处理dpi的问题, 导致显示菜单图标非常小 :(  如图:

PixPin_2024-07-31_14-52-29.png
除了菜单栏显示的字体正常, 其它字体都非常小.(我电脑当前DPI设置为150%)

那遇到DPI百分比值特别大的, 应该如何处理呢? GPT给出了一个解决方案如下:

[C] 纯文本查看 复制代码
// 获取系统DPI
int CDebugger::GetSystemDpi()
{
    HDC screen = GetDC(NULL);
    int dpiX = GetDeviceCaps(screen, LOGPIXELSX);
    //  int dpiY = GetDeviceCaps(screen, LOGPIXELSY);
    ReleaseDC(NULL, screen);
    return dpiX;
}


// 逻辑坐标和物理坐标之间的转换
int CDebugger::DPI(int logical)
{
    return MulDiv(logical, GetSystemDpi(), 96);
}

void test()
{
        m_hHwndLabelCombo =
        CreateWindowEx(
        0,
        _TEXT("ComboBox"),                  // window class name
        NULL,                       // window caption
        WS_VSCROLL | WS_CHILDWINDOW | WS_VISIBLE | CBS_DROPDOWN | CBS_AUTOHSCROLL | CBS_HASSTRINGS,         // window style
        g_lpThis->DPI(12),                   // initial x position
        g_lpThis->DPI(12),                   // initial y position
        g_lpThis->DPI(410),                  // initial x size
        g_lpThis->DPI(300),                  // initial y size
        hdlg,                       // parent window handle
        NULL,                       // window menu handle
        GetModuleHandle(NULL),      // program instance handle 11111 22222 33333
        NULL);
}

通过以上的代码创建的窗口或控件就能自适应显示大小了.
再看看我将DPI设置为225%, 修复DPI问题之后的效果:

PixPin_2024-08-01_00-08-20.png
上图只处理了菜单栏的图标,反汇编标题等是没有处理,所以字体显示还是小的.
------------------------------------------------------------------------------
如果一台主机投出2个及以上的视频源. 在系统设置里可以给每个屏幕设置不同的DPI.
假如有三块屏幕,屏幕A设置 DPI:100%  B设置 DPI:150%  C设置 DPI:200%,
你猜猜这个时候获取的DPI值会是多少?  :)



回复

使用道具 举报

游客
回复
您需要登录后才可以回帖 登录 | 注册

QQ|Archiver|手机版| CpuDbg x96

GMT, 2024-12-30 19:06 , Processed in 0.062500 second(s), 21 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表