1杉适,一個(gè)進(jìn)程至少擁有一個(gè)線程谎倔,稱為主線程,如果一個(gè)線程創(chuàng)建了窗口猿推,擁有GUI資源片习,那么也稱該線程為GUI線程捌肴,否則就為工作線程。窗口是由線程創(chuàng)建的藕咏,創(chuàng)建窗口的線程就擁有該窗口状知。這種線程擁有關(guān)系的概念對(duì)窗口有重要的意義:建立窗口的線程必須是為窗口處理所有消息的線程。為了使這個(gè)概念更加明確具體孽查,可以想像一個(gè)線程建立了一個(gè)窗口饥悴,然后就結(jié)束了。
??????在這種情況下盲再,窗口不會(huì)收到一個(gè)WM_DESTROY或WM_NCDESTROY消息铺坞,因?yàn)榫€程已經(jīng)結(jié)束,不可能被用來使窗口接收和處理這些消息洲胖。每個(gè)線程,如果它至少建立了一個(gè)窗口坯沪,都由系統(tǒng)對(duì)它分配一個(gè)消息隊(duì)列绿映。這個(gè)隊(duì)列用于窗口消息的派送(dispatch)。為了使窗口接收這些消息腐晾,線程必須有它自己的消息循環(huán)叉弦,消息循環(huán)一般如下:
MSG msg;
while( GetMessage(&msg, NULL, 0, 0) )
{
TranslateMessage (&msg);
DispatchMessage (&msg);
}
??????應(yīng)用程序不斷的從消息隊(duì)列中獲取消息,然后系統(tǒng)通過DispatchMessage函數(shù)分派消息到相應(yīng)窗口的窗口過程,使得消息得到處理藻糖。當(dāng)獲取到WM_QUIT消息時(shí)淹冰,GetMessage返回0,循環(huán)結(jié)束巨柒。