)該框架在設計之初的目標之一是做到可移植,由此帶來兩個問題:第一,如何在不修改**的前提下,在不同的平台上執行基於該框架的應用程式。第二,如何讓程式能在盡量多的平台上執行。要做到第一點,一般常用的方法是抽象一些通用介面,然後針對不同的平台分別實現,框架和應用程式不依賴具體平台**,而只依賴這些通用介面,也就是常說的依賴倒置。要做到第二點,一般需要用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...