天天看點

Windows SDK程式設計(Delphi版) 之 應用基礎,楔子

本來是打算将Windows API一日一練,往下講解的,但是,那個東西貌似又沒啥可講的。不熟悉SDK的程式設計,那些東西講了用處也不大,是以,就打算講講這個。

   Windows SDK程式設計,這個東西應該追溯到98時代了。而且如果要學習SDK之類的東西的話,還是去找Win98程式設計之類的書籍來看,現在的書籍專門講SDK的基本上沒有了,翻到手的都是.net架構,VCL使用那些東西了,對于底層的運作等等,講解甚少。我這裡的所有講解,都是依托《Win98程式設計從入門到精通》這本書為藍本進行Delphi版本的講解。本書用來學習SDK是非常不錯的,現在這個書已經絕版了,可以在網上搜搜電子版本的。

   WinMain入口函數

      做SDK開發,每個Windows程式都要有一個入口位置,也就是Windows開始執行的地方。學過C語言的,都曉得,C的入口為main函數,這個與main的效果是一樣的,隻是他标記了這是Windows程式,也就是說是可以有窗體的。WinMain函數的某些特征注定了他與應用程式的其他函數不同,首先他必須使用WINAPI的調用約定,這個在Delphi中就是Stdcall的約定方式,該函數的傳回類型是int類型。

   視窗過程

      用了這麼長時間的Windows,或者說學了那麼長時間的程式設計,無論是MFC,還是VCL,都應該知道Windows是通過消息驅動來實作各種操作響應的。這個視窗過程就是專門用來處理各種消息的,所有的消息驅動操作都在本過程中實作。隻要一個視窗指定了視窗過程,作業系統就會調用它。每個視窗都有一個預設的視窗過程,如果你不指定視窗過程,系統就會調用它預設的進行消息處理,作業系統通過視窗函數,來接受使用者的消息和回報使用者的對應各種消息的操作給系統。視窗函數的傳回類型為LRESULT,其實就是一個整數,該函數的傳回必須用CallBack标記表示它是一個系統回調函數。典型的一個視窗過程中,包含了對N多消息的處理的,一般是一個很大的Case end 條件結構來針對各種消息進行處理。但是在很多時候,我們不想響應任何消息而僅僅交給系統去處理,這時,我們就可以調用預設的視窗過程處理了。但是這個視窗過程是如何産生出來的呢,那麼就有另一個概念産生了,注冊一個視窗類,一個視窗類對應着一個視窗過程,這應該也算得上是一個面向對象的方式吧,就是說,比如一個按鈕類,他的消息響應處理視窗過程應該是同一個。

   視窗類

      視窗類定義視窗的類型,比如按鈕視窗,Form視窗,編輯框視窗等,不同的視窗類有不同的形态外觀,和不同的用法也就注定着有不同的視窗過程。

一個Windows程式,一般都有一個視窗,是以開始執行windows程式時,一般會定義并注冊一個視窗類(這個不是指Delphi等面向對象中的那個類,而是指樣式或者類型哦)。注冊一個視窗類的目的是告訴作業系統本視窗的類型外觀以及功能,這個視窗類就和前面講的視窗過程關聯起來了。不過注冊視窗類,并不是建立一個視窗。注冊視窗類,執行在系統内部增加一種視窗樣式,以便于以後能夠随時通過這個樣式來生成一個新的視窗。     

   消息循環

       消息循環式從應用程式的消息隊列中取回消息,前面講過了,Windows是消息驅動的是以,所有的Windows程式内部都要建立一個消息循環,此循環從應用程式的消息隊列中讀取任何未解決的消息,然後再将它送給Windows,這樣Windows就會調用相應的視窗函數來對消息進行處理了。書上說,這個過程的部分原因是想将控制傳回到作業系統中,以使排程表能合理的配置設定CPU時間,而不是等候應用程式時間片的結束。

本文轉自 不得閑 部落格園部落格,原文連結http://www.cnblogs.com/DxSoft/archive/2010/06/07/1753111.html:   ,如需轉載請自行聯系原作者

繼續閱讀