2011-02-06 23 views
0

在創建一個窗口:爲什麼WNDCLASS(Windows-C)安裝和使用像這樣?

1)我們爲什麼要註冊窗口類以及如何CreateWindow理解我們所期望的班?

WNDCLASS wc; 
RegisterClass(&wc) 

2)我們爲什麼要使用這個循環:

MSG msg; 
While(GetMessage(&msg,0,0,0)) 
{ 
    TranslateMessage(&msg); 
    DispathMessage(&msg); 
} 

在開始沒有消息話題,所以我們贏得了’噸進入循環,我們會從WinMain函數退出。

+2

@fred你有代表來解決拼寫 – 2011-02-06 00:18:49

+0

@大衛我修正了一些,不知道這是否是自己所想的? – 2011-02-06 00:51:39

回答

7

您註冊窗口類,因爲這是該系統是如何工作的。把它看作定義一個類型。 GetMessage阻塞,直到消息到達隊列中。

你真的需要閱讀查爾斯Petzold的書,Programming Windows

+0

鏈接到有問題的書? – 2011-02-06 00:18:38

2

原則當你的程序啓動時,你告訴Windows,你的窗口/程序已準備好接受信息 - 即註冊它。之後的消息循環是與用戶(和系統)進行交互的地方。每次需要一些交互時,它都會通過消息(或事件)傳遞給應用程序。在你的消息循環中,你定義瞭如何對不同消息作出反應的行爲。

除了UI信息有像定時器事件或消息系統相關的消息的其它消息。這些也可以處理。

1

你所做的關於GetMessage一個錯誤的假設。你聲明如果沒有消息,「我們不會進入循環」。這意味着如果沒有消息,則假定GetMessage返回false。

事實上,GetMessage返回false,只有當有一個WM_QUIT消息。如果沒有消息,GetMessage不會返回。它只是等待一條消息到達。這對許多程序都有很大意義。如果沒有輸入,則無需執行任何操作,並且程序不需要CPU時間。

某些程序定期需要一些CPU時間。這就是爲什麼他們使用WM_TIMER:以便GetMessage將控制權返回給您的代碼。

相關問題