Microsoft_Windows的訊息迴圈

微軟視窗操作系統是以事件驅動做爲程式設計的基礎 。 程式的執行緒會從作業系統獲取訊息 。 應用程式會不斷循環呼叫GetMessage函式 （ 或是PeekMessage函式 ） 來接收這些訊息 ， 這個循環稱之爲 “ 事件迴圈 ” 。 基本上事件迴圈的程式碼如下所示 （ C語言 / C++ 程式語言 ） ： MSG msg; / / 用於存儲一條消息 BOOL bRet; / / 從UI線程消息隊列中取出一條消息 while ( ( bRet = GetMessage ( & msg, NULL, 0, 0 ) )! = 0 ) { if ( bRet == -1 ) { / / 錯誤處理代碼 ， 通常是直接退出程序 } else { TranslateMessage ( & msg ); / / 按鍵消息轉換爲字符消息 DispatchMessage ( & msg ); / / 分發消息給相應的窗體  雖然在程序上並沒有很嚴格的規定與要求 ， 但是一般來說 ， 它的事件迴圈通常會呼叫TranslateMessage函式與DispatchMessage函式 ， 這兩個函式會傳遞訊息給回呼函式 ， 以及調用相應視窗的消息處理函數 。 現在的繪圖介面架構程式設計 ， 例如Visual Basic與Qt基本上是不會要求應用程式直接擁有視窗程式的訊息迴圈 ， 但是會以鍵盤與滑鼠的按鍵動作來作爲事件的處理機制 。 在這些架構底下 ， 訊息迴圈的痕跡還是可以被找到的 。 注意 ： 在上述的原始碼裏 ， 尤其在while迴圈大於零的條件 。 即使GetMessage函式的傳回值型態是英文字大寫的BOOL ， 但是在Win32視窗程式裏 ， 它是被定義成int整數型態 ， 它有兩個值 ， TRUE是整數的1 ， FALSE是整數的0 。 整數 -1 代表error （ 例如第二個參數爲輸出的窗口句柄但取不到值的時候 ） ， 整數0值當GetMessage獲取到WM_QUIT訊息 。 假如有其他訊息 ， 那麼非零值會當成傳回值 （ 有訊息的傳回值通常是正值 ， 但是有些程式設計的說明文件不一定會說明的很詳細 ） 。