渲染引擎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 ...