TinyUI-TUIWindow-最簡單的自定義

       TinyUI與傳統Windows開發類似,使用窗口(TUIWindow)作爲其他UI組件的載體,其設計模式與傳統windows、Android等平臺開發類似屬於MVC設計模式。

       但TinyUI作爲輕量級的UI庫,開發者可以把它與其他第三方UI庫一樣使用,把一個一個組件通過計算/設置座標的方式使其展示在屏幕中,即通過調用UI組件的setGeometry()方法設置控件的具體座標,如果這樣使用就失去了TinyUI設計的初衷;因爲,如果把一個一個UI組件單獨使用而不使用窗口管理,則TinyUI的事件驅動系統將無法正常驅動整個UI系統工作,必然導致使用者難以避免的在硬件/外設中斷函數中刷新UI!

       作爲TinyUI組件容器,其窗口(TUIWindow)控件需爲其設置具體的內容視圖,內容視圖可以是任意佈局控件或其他可見UI組件,在TinyUI介紹篇中我們貼出來About窗口部分代碼。About部分的代碼是把一個GridLayout作爲Window的內容視圖,本片作爲TUIWindow最簡單的入門篇,將使用TUITextView作爲window的內容視圖進行演示。

       自定義窗口都必須繼承自TinyUI的TUIWindow類,同時該類有2個純虛方法需要繼承者進行實現,關於這2個方法的調用時機及其作爲我們將在後續的教程中進行介紹,本篇主要展示TinyUI的TUIWindow的最簡單使用方法。

 

一、自定義窗口

1. 創建名爲MyWindow的類

    MyWindow.h

#ifndef __MY_WINDOW_H__
#define __MY_WINDOW_H__
#include <TUIWindow.h>


class MyWindow : public TUIWindow
{
public:
    MyWindow(TUIWindow* parent = nullptr);
    virtual ~MyWindow();

    void onShow();
    void onClose();

private:
    TUITextView textView; // 使用TUITextView作爲當前窗口的內容視圖
};

#endif // !__MY_WINDOW_H__

   上述代碼中,MyWindow繼承自TUIWindow,同時實現了TUIWindow的2個純虛方法,分別是onShow()即onClose()等方法。

   上述代碼中定義了一個TUITextView,我們將把它作爲MyWindow的內容視圖。

 

2. 實現MyWindow類,並設置內容視圖

MyWindow.cpp

#include "MyWindow.h"


MyWindow::MyWindow(TUIWindow* parent)
    : TUIWindow(parent)
{
    setContentView(&this->textView); // 把textView作爲MyWindow的內容視圖

    textView.setText(L"Window"); // 設置textView顯示的文字爲"window"
}

MyWindow::~MyWindow()
{
}

void MyWindow::onShow()
{
}

void MyWindow::onClose()
{
}

    上述內容中,通過setContentView(&this->textView)把textView組件作爲MyWindow的內容視圖。

 

    到目前爲止,自定義窗口的所有工作已全部完成

 

二、使用MyWindow窗口

    作爲入門篇,我們把窗口放到TinyUI的模擬器演示程序,並將其啓動。

1. 在演示程序中包含MyWindow的頭文件

#include "MyWindow.h"

2. 定義MyWindow窗口及測試按鈕

        爲了讓其在模擬器演示程序顯示一個測試按鈕,我們還需要定義一個按鈕,當點擊該按鈕時顯示MyWindow窗口。

LUIButton myWidowTest;
MyWindow myTestWindow;

3. 把MyWindow的測試按鈕放到模擬器演示程序主界面

myWidowTest.setMargin(5, 5, 5, 5);
myWidowTest.setText(L"My Window");
myWidowTest.registerListener(this);
workspaceLayout.addView(&myWidowTest, 2, 5);

       把MyWindow的測試按鈕放到模擬器演示程序的第2行,第5列的爲止,並把該按鈕顯示的內容設置爲"My Window",按鈕的其他設置暫時不關注,後續我們專題講解。

        到目前爲止,我們的模擬器演示程序主界已成功加入了My Widnow的測試項,其最終展示界面如下圖所示:

       上圖中,最後一行,最後一列即是我們添加的My Window測試按鈕。

 

4. My Window按鈕點擊事件

       當模擬器演示程序的My Window按鈕被點擊後,模擬器演示程序窗口的void onClick(LUIButton* view)將會被調用,爲什麼被調用或如何被調用到,該部分後續詳細講解,屬於事件驅動系統部分。

        我們在void onClick(LUIButton* view)方法中添加對應的控件id判斷,即調用MyWindow的show()方法

if (myWidowTest.getId() == id)
{
    myTestWindow.show();
}

 

        至此,整個MyWindow定義和測試代碼都已經完成,接下來,我們點擊模擬器演示程序的"My Window"按鈕

5. 點擊"My Window"按鈕

        當"My Window"按鈕被點擊後,上述第4步中的onClick()方法被調用,並通過視圖控件id判斷,條件滿足,最後將執行myTestWindow.show()方法,該方法調用完成之後,成功顯示了MyWindow的窗口,如下圖所示:

我們可以看到MyWindow中的textView也作爲自定窗口內容視圖,併成功顯示了window字樣。

--------- 測試成功

 

關於TinyUI最簡單的自定義窗口至此已全部完成。

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章