標籤:style blog http 使用 io 2014 ar 時間
這裡在學網路編程時遇到了講解windows的編程,稍微整理一下windows編程原理,順便複習一下。
首先,理解Windows 程式運行原理:Windows應用程式,作業系統,電腦硬體之間的相互關係。
向下的箭頭③表示應用程式可以通知作業系統執行某個具體的動作,如作業系統能夠控制音效卡發出聲音,但它並不知道應該何時發出何種聲音,需要應用程式告訴作業系統該發出什麼樣的聲音。這個關係好比有個機器人能夠完成行走的功能,但是,如果人們不告訴它往哪個方向上走,機器人是不會主動行走的。這裡的機器人就是作業系統,人們就是應用程式。
那麼,應用程式是如何通知作業系統執行某個功能的呢?有過編程經驗的讀者都應該知道,在應用程式中要完成某個功能,都是以函數調用的形式實現的,同樣,應用程式也是以函數調用的方式來通知作業系統執行相應的功能的。作業系統所能夠完成的每一個特殊功能通常都有一個函數與其對應,也就是說,作業系統把它所能夠完成的功能以函數的形式提供給應用程式使用,應用程式對這些函數的調用就叫做系統調用,這些函數的集合就是Windows作業系統提供給應用程式編程的介面(Application Programming Interface),簡稱Windows API。如CreateWindow就是一個API函數,應用程式中調用這個函數,作業系統就會按照該函數提供的參數資訊產生一個相應的視窗。
向上的箭頭④表示作業系統能夠將輸入裝置的變化上傳給應用程式。如使用者在某個程式活動時按了一下鍵盤,作業系統馬上能夠感知到這一事件,並且能夠知道使用者按下的是哪一個鍵,作業系統並不決定對這一事件如何作出反應,而是將這一事件轉交給應用程式,由應用程式決定如何對這一事件作出反應。好比有個蚊子叮了我們一口,我們的神經末梢(相當於作業系統)馬上感知到這一事件,並傳遞給了我們的大腦(相當於應用程式),我們的大腦最終決定如何對這一事件作出反應,如將蚊子趕走,或是將蚊子拍死。對事件作出反應的過程就是訊息響應。
作業系統是怎樣將感知到的事件傳遞給應用程式的呢?這是通過訊息機制(Message)來實現的。作業系統將每個事件都封裝成一個稱為訊息的結構體MSG來傳遞給應用程式,參看MSDN。 MSG結構定義如下:
typedef struct tagMSG
{
HWND hwnd; //視窗控制代碼,存放視窗的標識
UINT message;//用一個整數來表示一個訊息
WPARAM wParam;//指示關於該訊息的附加資訊
LPARAM lParam;//同上(無符號整型)
DWORD time;//訊息被投遞出去的時間
POINT pt;//點的結構體,訊息被投遞時的游標位置
} MSG;
關於控制代碼:控制代碼(HANDLE),資源的標識。 作業系統要管理和操作這些資源,都是通過控制代碼來找到對應的資源。按資源的類型,又可將控制代碼細分成表徵圖控制代碼(HICON),游標控制代碼(HCURSOR),視窗控制代碼(HWND),應用程式執行個體控制代碼(HINSTANCE)等等各種類型的控制代碼。作業系統給每一個視窗指定的一個唯一的標識號即視窗控制代碼。
WinMain函數即Windows程式的入口函數
int WINAPI WinMain(
HINSTANCE hInstance, // handle to current instance
HINSTANCE hPrevInstance, // handle to previous instance
LPSTR lpCmdLine, // command line (char* argv[])
int nCmdShow // show state );