LibUIDK介面庫系列文章 對話方塊座標單位

2021-08-08 23:17:24 字數 937 閱讀 1459



在*.rc中,對話方塊中及其中的控制項的座標單位叫「對話方塊座標單位」,英文縮寫為dlu。它們實際上依據一種特殊的座標系統,該系統只用於對話方塊模板。數字依據對話方塊使用字型的大小而定:x座標和寬度的單位是字元平均寬度的1/4;y座標和高度的單位是字元高度的1/8。

公式如下:

pixelx = (dialogunitx * baseunitx) / 4

pixely = (dialogunity * baseunity) / 8

其中:dialogunitx為rc檔案中,元素的座標值。baseunitx為對話方塊單位。

使用getdialogbaseunits()可以得到對話方塊單位,在計算時,它總是以系統字型為標準。如果你為對話方塊設定了與系統字型不同的字型。可以使用下面兩種方法中的任意一種來計算對話方塊單位。

方法一:

對話方塊的垂直單位與設定為對話方塊的字型的字元高度相同。水平單位與字元平均寬度相同。平均寬度可以通過字母表中的52個字元(大小寫各26個)的總寬度除以52得到。**如下:

void caboutdlg::onpaint()

把計算得到的baseunitx和baseunity代入上面的公司,就可以計算對應的畫素值了。

方法二:

這種方法更簡單,使用mapdialogrect()函式把crect rc(0, 0, 4, 8);座標轉換後的right和bottom值,就是對話方塊單位。**如下:

void caboutdlg::onpaint()

例如:如果在rc中,某個對話方塊的寬度為320,高度為200。通過上面兩種方法之一,計算得到baseunitx為6,baseunity為13。那麼對話方塊執行後,尺寸畫素為:

width = 320 * 6 / 4 = 480;

height = 200 * 13 / 8 = 325。

但請注意的是:這裡的寬度和高度對應的是客戶區大小,不包含非客戶區。

LibUIDK介面庫系列文章 響應預設按鈕

在對話方塊中,如果按鈕的屬性指定了bs defpushbutton風格,那麼在對話方塊中按下enter鍵,就會呼叫設定了bs defpushbutton風格的按鈕的響應函式。但如果我們在普通cwnd派生類中,建立了bs defpushbutton風格的按鈕,按下enter鍵,卻不會執行些按鈕的響應函...

資料庫使用系列文章

資料庫在網際網路應用中佔據著不可或缺的作用,本系列文章旨在針對資料庫從背景 基本應用到高效使用作出一定總結。資料庫從字面上的理解就是資料的倉庫,其實我們平時說的資料庫是指資料庫管理系統 database management system 它是一種操縱和管理資料庫的大型軟體,用於建立 使用和維護資料...

Mybatis系列文章(4) 多表查詢,一對多

使用者和賬戶 乙個使用者可以有多個賬戶 乙個賬戶只能屬於乙個使用者 多個賬戶也可以屬於同乙個使用者 1.建立兩張表 使用者表,賬戶表 讓使用者表和賬戶表之間具備一對多的關係,需要使用外來鍵,在賬戶表中新增 2.建立兩個實體類 使用者實體類和賬戶實體類 讓使用者和賬戶的實體類能體現出一對多的關係 3....