2015年12月13日 星期日

Windows視窗程式的一些知識


基本上傳統的程式叫Console(主控台),也就是它是一個執行檔,會一行一行的執行,

windows視窗程式基本上它是一個圖形介面,基本上您靠滑鼠點一點,他就可以執行程式設計師設計好的程式功能,

您只要打開windows,桌面其實就是一個應用程式,也就是explorer.exe,如果您會用DOS開機,您可以故意把explorer.exe殺掉或改名子,您重新登入windows時你會發現進不到桌面,應該是一片藍藍的(這是XP時的知識,我不確定之後的版本是否還是一樣,我沒有試過)

其實您有看過嵌入式板子的視窗程式是如何執行的,舉個例來說,QT程式,他會有一個基本框架,當您進入那個環境時,他背景全部是藍色的,如果您有開啟QT程式,您會發現他跟windows只差在沒有下面的工具列,就是一個藍藍的背景,然後沒有任何作用,如果您有開啟程式,就是藍藍的背景上有一個應用程式顯示

說起來windows程式算是一個block的程式,他會根據您的動作,去執行相對應的動作,做完會繼續block住,總之您把她想成是人家設計好的框架,您只要會利用編程(例如C++ builder or Visual C#)拉一拉介面,編譯完就會出現圖形程式就對了,一開始時不需要知道太多知識

Windows程式啟動時,其實他也是執行一個Main(),我舉C++ builder的例子
您開啟一個project,可以在裡面找tWinMain

///////////////////////////////////////////////////////////
int WINAPI _tWinMain(HINSTANCE, HINSTANCE, LPTSTR, int)
{
        try
        {
                Application->Initialize();
                Application->MainFormOnTaskBar = true;
                Application->CreateForm(__classid(TForm2), &Form2);
                Application->Run();
        }
        catch (Exception &exception)
        {
                Application->ShowException(&exception);
        }
        catch (...)
        {
                try
                {
                        throw Exception("");
                }
                catch (Exception &exception)
                {
                        Application->ShowException(&exception);
                }
        }
        return 0;
}

///////////////////////////////////////////////////////////

其實他就是一個執行續跑tWinMain,他會建立一個Form,並執行他(Application->Run();),他會再開另一個執行緒跑您的應用程式,然後程式就停在Application->Run();,直到您關閉程式時,他會繼續執行下去,直到return 0;

這裡是初始化過程,進去就是所謂的windows programming那套了,初學者大概知道到這邊就好,您只要會拉幾個Button照他的寫法寫,CompilerLink過就會動了,並不難理解

基本上C++ builder開發速度很快,比Visual C++ MFC好寫太多了,入門門檻比較低,到目前為止我還不知道Visual C++ MFC要如何寫,而且C++ Builder畫面可以做比較多的設計,如果您要用C++寫視窗程式,就目前而言,大概就是C++ Builder,而C#就是Visual C#,沒別的寫法了,總之就是使用他們來寫您要的桌機應用程式就對了

大概就介紹到這裡,下面講一些重點,

基本上現在程式都往多執行緒的方式開發,因為如果您將所有程式片段都在主執行緒執行,你的應用程式在跑時會卡卡的,有時候會動彈不得,例如您建一個Button,在按下Button時您執行Sleep(100)或者是while(1);您程式就無法控制了,不會動了,以上是模擬當您執行很長一段程式(while(1);),程式就當掉了,

這基本上多執行緒程式已經成為寫視窗程式主流的寫法了,您不那樣寫,不知道哪個時候您程式就出錯當掉了,或者是沒辦法利用到多核心能力,快速處理掉您要做的事情

當然,這是寫到後期,必須具備的技能,一開始就是拉一拉Button,設計一個有功能程式就很棒了,所以也是急不得的,多執行緒程式基本上要用到一些底層的函式,例如CreateThread,並把它弄成一個函式,可以rework(就是所謂的Msgthread,他接受不同的Msg執行不同的動作),這基本上外面是沒得學的,

要自學只能使用tthread,或者PPL的東西(XE7以後才有)所以就是會基本的程式撰寫,基本上要進一些有基礎的公司,慢慢地重新學,不然是學不起來的,

很像是你只有一歲,您知道如何騎機車嗎,就算是轉轉把手,也要有人教您,是吧

總之在沒基礎時
基本上您的活動範圍在主執行緒,要功能的話要會演算法,不然就是要會使用他的元件

有基礎時,
您必須開始會Windows消息傳遞這項技術,並嘗試使用TThread

當您比較能掌握時
要開始接觸Windows Programming的函式庫,並熟用他,如果不會的話,想辦法進入會的公司學吧,這是唯一道路,其實他並不陌生,例如FileExists他就是一個Windows Programming的函式

一般再來就是進公司,
就是想辦法把Windows Programming熟悉(其實也不用全會,因為那很多你的領域不見得會用到,學有用到的即可),並將您那領域的演算法攻破,並會優化技術,利用公司已有的基礎,向上發展,這是唯一解

 

 

沒有留言:

張貼留言