天天看點

VC++中為什麼要注冊視窗類

我們在使用microsoft平台SDK或者MFC程式設計時,在建立視窗類後都要先用RegisterClass函數來注冊視窗類,這個函數需要一個指向視窗類結構的指針。那麼RegisterClass這個windows API函數到底做了什麼呢,關于這個函數的源碼微軟是不會給出來的,因為它隻是提供一個系統程式設計接口,網上也找不到相關說明,隻是粗略介紹需要将類注冊給系統,但從msdn的atom table說明中我們發現這樣一段說明。The system uses atom tables that are not directly accessible to applications. However, the application uses these atoms when calling a variety of functions. For example, registered clipboard formats are stored in an internal atom table used by the system. An application adds atoms to this atom table using。答案有了,在我們構造一個視窗類結構後,我們需要将這個類結構指針加入到system atom table 即SAT中,這樣系統就可以通過查找這張表來找到使用者自定義的視窗類,window預定義的視窗類指針也在SAT中。SAT實際上實作了一種用于查詢的映射,atom實際類型是short,即16位資料。隻有系統才可直接通路這張表,但在調用某些api函數時,如Registerclass,可以告知系統來存取這張表。當然,還有本地原子表和全局原子表,這些表應用程式是可以直接通路的。

繼續閱讀