字型的大小不跟隨系統DPI的更改而改變的解決方案

2021-07-01 19:06:34 字數 1826 閱讀 4316

字型的大小會隨著系統dpi的更改而變化。在此以mfc中視窗中有rich edit控制項為例來說明如何來解決這個問題。

已知要設定的字型大小為12pt,dpi -> 100%狀態下(1inch = 96pixel)

要實現dpi更改為其他時字型的現實效果不變。

實現原理:

1)先求出dpi 100%狀態下對應的pixel值

2)動態的求出當前的dpi,然後根據之前求出的pixel值轉換到合適twips單位的值。(richedit的字型是twips單位的)

實現步驟:

0)先來看下以下幾個要用到的函式

bool getdpi(uint &dpi, bool bisheightpx = true);

void pointtopixel(float pt, uint dpi, float &px);

bool pixeltotwips(float px, float &twips);

函式的實現請看最後

1)我們需要先求出dpi 100%狀態下對應的pixel值:

float px;

pointtopixel(12, 96, px);

2)我們要動態的求出當前的dpi,然後根據之前求出的pixel值轉換到合適twips單位的值:

float twips;

pixeltotwips(px, twips);

3)ok了 twips就是你要設定的richedit的字型的大小。

下面是我寫的一些px ,pt,twips的裝換相關函式:

函式定義 dpiaction.h

#include

#include

bool getdpi(uint &dpi, bool bisheightpx = true);

bool pointtopixel(float pt, float &px);

void pointtopixel(float pt, uint dpi, float &px);

bool pixeltopoint(float px, float &pt);

void pixeltopoint(float px, uint dpi, float &pt);

bool pixeltotwips(float px, float &twips);

void pixeltotwips(float px, uint dpi, float &twips);

函式實現:dpiaction.cpp

#include "dpiaction.h"

tchar tszdebug_dpi[max_path] = ;

bool getdpi(uint &dpi, bool bisheightpx)

if (bisheightpx)

else

}bool pointtopixel(float pt, float &px)

px = pt*dpi/72;

return true;

}void pointtopixel(float pt, uint dpi, float &px)

// px to pt

bool pixeltopoint(float px, float &pt)

pt = px*72/dpi;

return true;

}void pixeltopoint(float px, uint dpi, float &pt)

// px to twips

bool pixeltotwips(float px, float ltwips = px*1440/dpi;

}void pixeltotwips(float px, uint dpi, float

設定UIButton字型的大小

引入 在ios程式中設定 uibutton 的字型大小。實現方式 btn.frame cgrectmake x,y,width,height btn settitle search forstate uicontrolstatenormal 設定按鈕上的自體的大小 btn setfont uifon...

C 讀取系統字型顏色與大小的方法

首先,說到字型 顏色,我們應該想到system.drawing命名空間 先說說獲取系統字型的方法 在system.drawing命名空間下有個fontfamily類,其下有個靜態www.cppcns.com屬性 families 返回的是乙個 fontfamily物件陣列 注 system.draw...

QT程式在不同dpi下的字型自適應問題

問題描述 近日在做關於qt的乙個上位機專案,開發時使用的螢幕解析度為1080 1902,開發完成後,傳到筆記本上給導師展示的時候發現有些字型出現顯示不全的情況 如下圖所示 經過一番折騰,找到乙個初步解決方案,故分享出來供大家討論。問題分析 該問題主要由於螢幕的dpi不同所致。dpi反映的是每英吋長度...