Duilib 原始碼分析(四)控制項繪製

2022-06-10 08:15:07 字數 1868 閱讀 4365

渲染引擎crenderengine:封裝gdi

//duilib-master\duilib\core\uirender.h

class duilib_api crenderengine

//duilib-master\duilib\core\uirender.cpp

void crenderengine::drawline( hdc hdc, const rect& rc, int nsize, dword dwpencolor, int nstyle)

; ::movetoex(hdc, rc.left, rc.top, &pttemp);

::lineto(hdc, rc.right, rc.bottom);

::selectobject(hdc, holdpen);

::deleteobject(hpen);

}

繪製重新整理流程

// 設定控制項無效

void ccontrolui::invalidate()

//設定乙個無效區域,並且傳送wm_paint訊息

void cpaintmanagerui::invalidate(rect& rcitem)

//處理wm_paint訊息

bool cpaintmanagerui::messagehandler(uint umsg, wparam wparam, lparam lparam, lresult& lres)

//進行繪製

bool ccontrolui::paint(hdc hdc, const rect& rcpaint, ccontrolui* pstopcontrol)

//真正進行繪製

bool ccontrolui::dopaint(hdc hdc, const rect& rcpaint, ccontrolui* pstopcontrol)

//背景顏色

void ccontrolui::paintbkcolor(hdc hdc)

//背景圖

void ccontrolui::paintbkimage(hdc hdc)

//狀態圖

void ccontrolui::paintstatusimage(hdc hdc)

//文字

void ccontrolui::painttext(hdc hdc)

//邊框

void ccontrolui::paintborder(hdc hdc)

控制項基類uicontrol

//duilib-master\duilib\core\uicontrol.h

class duilib_api ccontrolui

標籤控制項clabelui

// 繼承ccontrolui

// duilib-master\duilib\control\uilabel.h

class duilib_api clabelui : public ccontrolui

按鈕控制項cbuttonui

// 繼承clabelui

// duilib-master\duilib\control\uibutton.h

class duilib_api cbuttonui : public clabelui

小結控制項繪製,最底層還是作業系統提供的gdi介面。渲染引擎crenderengine對gdi進一步的封裝,方便呼叫。而控制項則根據自身的型別使用crenderengine進行繪製。

duilib技術***:799142530

Duilib 原始碼分析之字型篇

在 duilib 中,我們可以定義多種字型,不同的控制項使用不同的字型來豐富我們的介面,今天我們來介紹一下 duilib 是如何使用字型的。首先,duilib 中定義字型的方法如下 name microsoft yahei size 12 bold false italic false defaul...

Duilib 原始碼分析(一)示例推演

duilib示範例子 使用duilib編寫乙個介面軟體,本質上還是乙個win32的軟體,只不過這個軟體的介面不使用windows自帶的控制項,而是交給duilib繪製介面。關於訊息處理,底層還是處理window訊息,但duilib會進一步轉化成duilib訊息,方便編寫響應的邏輯。最簡單的win32...

uC OS II原始碼分析(四)

核心結構 1,臨界區,os enter critical 和os exit critical 為了處理臨界區 必須關中斷,等處理完畢後,再開中斷。關中斷可以避免其他任務或中斷進入臨界區 uc os ii 定義了這兩個巨集來實現,但注意一條 呼叫 uc os ii 功能函式時,中斷應該總是開著的。1 ...