字型的大小會隨著系統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 引入 在ios程式中設定 uibutton 的字型大小。實現方式 btn.frame cgrectmake x,y,width,height btn settitle search forstate uicontrolstatenormal 設定按鈕上的自體的大小 btn setfont uifon... 首先,說到字型 顏色,我們應該想到system.drawing命名空間 先說說獲取系統字型的方法 在system.drawing命名空間下有個fontfamily類,其下有個靜態www.cppcns.com屬性 families 返回的是乙個 fontfamily物件陣列 注 system.draw... 問題描述 近日在做關於qt的乙個上位機專案,開發時使用的螢幕解析度為1080 1902,開發完成後,傳到筆記本上給導師展示的時候發現有些字型出現顯示不全的情況 如下圖所示 經過一番折騰,找到乙個初步解決方案,故分享出來供大家討論。問題分析 該問題主要由於螢幕的dpi不同所致。dpi反映的是每英吋長度...設定UIButton字型的大小
C 讀取系統字型顏色與大小的方法
QT程式在不同dpi下的字型自適應問題