1,一個進程至少擁有一個線程,稱為主線程,如果一個線程創(chuàng)建了窗口,擁有GUI資源,那么也稱該線程為GUI線程,否則就為工作線程。窗口是由線程創(chuàng)建的,創(chuàng)建窗口的線程就擁有該窗口。這種線程擁有關系的概念對窗口有重要的意義:建立窗口的線程必須是為窗口處理所有消息的線程。為了使這個概念更加明確具體,可以想像一個線程建立了一個窗口,然后就結束了。
??????在這種情況下,窗口不會收到一個WM_DESTROY或WM_NCDESTROY消息,因為線程已經結束,不可能被用來使窗口接收和處理這些消息。每個線程,如果它至少建立了一個窗口,都由系統(tǒng)對它分配一個消息隊列。這個隊列用于窗口消息的派送(dispatch)。為了使窗口接收這些消息,線程必須有它自己的消息循環(huán),消息循環(huán)一般如下:
MSG msg;
while( GetMessage(&msg, NULL, 0, 0) )
{
TranslateMessage (&msg);
DispatchMessage (&msg);
}
??????應用程序不斷的從消息隊列中獲取消息,然后系統(tǒng)通過DispatchMessage函數分派消息到相應窗口的窗口過程,使得消息得到處理。當獲取到WM_QUIT消息時,GetMessage返回0,循環(huán)結束。