我們已經介紹了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 並將程式...