UI框架系統剖析系列4(系統適配層)

2021-06-12 15:46:50 字數 2353 閱讀 5778

)該框架在設計之初的目標之一是做到可移植,由此帶來兩個問題:第一,如何在不修改**的前提下,在不同的平台上執行基於該框架的應用程式。第二,如何讓程式能在盡量多的平台上執行。要做到第一點,一般常用的方法是抽象一些通用介面,然後針對不同的平台分別實現,框架和應用程式不依賴具體平台**,而只依賴這些通用介面,也就是常說的依賴倒置。要做到第二點,一般需要用c語言編寫**,因為目前為止還有很大一部分平台不支援c++(尤其是嵌入式平台),而c語言又難以表達物件導向思想,所以大家看到原始碼工程中有兩個帶"_c"字尾的工程(mobiledemo_c和win32adapter_c),這兩個工程分別是將c++轉換成c後的工程,方便做到更多平台的適配。在這裡我們不詳細介紹如何將c++**轉換成c(以後有機會再向大家介紹),而是著重介紹如何做到系統適配。

開啟win32adapter工程,和系統適配相關的檔案主要包括以下幾個:emyui、escreen、ewndgc、win32file、win32thread、win32os等,下面分別介紹。

1.escreen是對螢幕的抽象,比如我們的手機有顯示屏,pc也有顯示屏。由於是在pc中執行,這裡escreen可以看做是對硬體螢幕的一種抽象。

#include "ewndgc.h"

class cemyui;

class cescreen : public cwnd

}afx_virtual

// implementation

public:

// generated message map functions

protected:

//}afx_msg

afx_msg lresult onimechar(wparam wparam, lparam lparam);

declare_message_map()

public:

virtual bool create(lpctstr lpszwindowname, const rect& rect, cwnd* pparentwnd);

void key(aws_keytype type, aws_keycode code);

void setui(cemyui* pmyui);

protected:

static bool registerclass();

protected:

static cstring m_strclassname;

private:

cemyui* m_pmyui;

cewndgc m_owndgc;

bool m_bisfirstkeydown;

bool m_bnochar;

};

看如上**,cescreen由cwnd繼承而來,所以這裡我們是用乙個windows視窗來模擬實際硬體螢幕。在該類的實現中會截獲一些系統訊息,比如按鍵、滑鼠等訊息,還有繪製訊息,請看下面**:

void cescreen::key(aws_keytype type, aws_keycode code)

void cescreen::onkeydown(uint nchar, uint nrepcnt, uint nflags)

if ( nchar >= vk_numpad0 && nchar <= vk_divide )

m_bnochar = true;

if ( aws_keycode_null != code && null != m_pmyui )

else

}cwnd::onkeydown(nchar, nrepcnt, nflags);

}

void cescreen::onpaint()

; rect.right = rt.right - rt.left;

rect.bottom = rt.bottom - rt.top;

dc.fillsolidrect(&rect, rgb(255, 255, 255));

cesprect ert;

ert.m_ptrb.m_nx = rect.right;

ert.m_ptrb.m_ny = rect.bottom;

trace0("screen paint\n");

m_pmyui->ondraw(ert);

}

onkeydown函式截獲了系統按鍵訊息,然後通過m_pmyui->onkey(aws_key, code);將其傳遞給框架系統處理。onpaint函式截獲了系統繪製訊息,通過m_pmyui->ondraw(ert);函式傳遞給框架系統處理。key函式可以用於產生虛擬的按鍵訊息。

2.emyui是對ui的一種抽象,其父類是cawsui,包括了訊息路由和其他

UI框架 Bootstrap柵格系統

1.什麼是柵格系統 在bootstrap中,它提供了一套響應式 移動裝置優先的流式柵格系統,隨著螢幕或視口 viewport 尺寸的增加,系統會自動分為最多12列。柵格系統用於通過一系列的行 row 與列 column 的組合來建立頁面布局,你的內容就可以放入這些建立好的布局中,bootstrap ...

剖析ext4檔案系統

簡介 第 4 個擴充套件檔案系統,即 ext4 是下一代的日誌檔案系統,它與上一代檔案系統 ext3 是向後相容的。儘管 ext4 目前還不是標準檔案系統,但它將成為大部分下一代 linux 發行版的預設檔案系統。了解 ext4,以及它為什麼將成為您最喜歡的新檔案系統。linux 核心的每次發行都伴...

51系列小型作業系統精髓 簡單實現4

include define max tasks 2 任務槽個數.必須和實際任務數一至 define max task dep 12 最大棧深.最低不得少於2 個,保守值為12.unsigned char idata task stack max tasks max task dep 任務堆疊.un...