剖析WINX的Hello程式

2021-04-16 12:36:21 字數 1528 閱讀 3101

我們已經介紹了windows sdk的hello程式,它的流程主要分為三個步驟:

註冊視窗類(registerclass)。並且我們詳細解釋了為何要有視窗類,為何要registerclass。

建立並顯示視窗(createwindow and showwindow)。

訊息迴圈(messageloop)。即:取得訊息 -> 分派訊息 -> 處理訊息。

這裡,我們就要結合winx的hello程式,把整個流程串一遍。

作為比較,我想溫習一下atl/wtl的hello程式。我們在此提供了幾篇剖析atl/wtl的hello程式的好文章:

#define

#include 

<

winx.h

>

class

chellomainframe : 

public

winx::mainframe

<

chellomainframe

>

winx中registerclass是需要主動呼叫的,這倒省了象atl/wtl那樣解釋半天:-)

區別於已知的所有c++介面庫(mfc、atl/wtl、**artwin、wxwidgets等等,甚至包括我早期寫的sw系統),winx傾向於把registerclass概念告訴使用者。並且,為此我專門寫了一篇「windows精解:視窗類釋疑」來解釋相關概念的重要性。這一切與winx的視覺化策略有關,我們在「winx如何做到視覺化介面開發」中詳述這一點。

以下這些巨集與winx的registerclass有關:

它們分別對應windows視窗類(wndclas***)中的成員:

class

chellomainframe : 

public

winx::mainframe

<

chellomainframe

>;

winx引入了許多小巧的初始化類。大致有:

ccommoduleinit - ccommodule init/term。

這些初始化類**簡單,但是抽象得恰到好處。在winx之前,我曾經試圖把這些初始化過程包裝起來不讓使用者看到,但是最終不得不放棄。

class

public

wtl::cmessageloop~

訊息迴圈中,訊息最終被windows傳送到視窗過程(windowproc)中。那麼winx的視窗過程在哪?

template 

<

class

windowclass, 

class

handleclass 

=defaultwindowhandle

>

class

window

else

else

}windowmap::setwindow(hwnd, pwnd);

}return

pwnd

->

proces**essage(hwnd, message, wparam, lparam);}};

這裡面有幾個細節需要解釋:

剖析WINX的Hello程式

我們已經介紹了windows sdk的hello程式,它的流程主要分為三個步驟 註冊視窗類 registerclass 並且我們詳細解釋了為何要有視窗類,為何要registerclass。建立並顯示視窗 createwindow and showwindow 訊息迴圈 messageloop 即 取...

hello程式的編寫與執行

在unix系統中可用gcc編譯器對原始檔進行編譯。命令如下 unix gcc o hello.c unix 為shell命令列直譯器的命令提示符,shell命令列直譯器會根據我們輸入的命令呼叫對應的程式,因此輸入gcc之後就是呼叫編譯器對原始檔進行編譯鏈結並生成可執行檔案,儲存在磁碟上。1 2兩步中...

Linux應用程式開發 Hello

第一步 在linux平台 我用的是redhat9.2 上安裝好gcc編譯工具,例如編譯arm平台的應用程式可用arm linux gcc,如用在pc平台下執行,可用pc自帶的gcc。第二步 編寫hello程式,可以使用redhat自帶的gedit。程式如下 include int main 並將程式...