windows編程中關於“關閉視窗無法退出進程”的解決方案

來源:互聯網
上載者:User

標籤:

一般會出現如下兩種情況

1、WinMain函數中,最後階段接收訊息佇列迴圈中,調用的GetMessage函數參數提供錯誤
如:

while (GetMessage(&msg,hwnd, 0,0))  
    {
      TranslateMessage(&msg);
      DispatchMessage(&msg);
    }

這個錯誤往往是由於程式員疏忽大意造成的,個別編譯器使用時會有自動補全(提示)功能,會提示GetMessage函數的第二個參數是一個HWND型的參數,按照習慣,容易直接寫成hwnd,這是不對的,一般情況下,第二個參數會置為空白,即NULL;

2、訊息迴圈本身出現邏輯錯誤
如:

 while (TRUE) 
 { 
  if(GetMessage (&msg, NULL, 0, 0)) 
  { 
if(msg.message==WM_QUIT) { break; } 
  TranslateMessage (&msg) ; 
DispatchMessage (&msg) ;
  }
 }

while迴圈的判斷部分始終為真,程式即使接受退出訊息,也不會退出進程,這是邏輯錯誤,也是編程習慣的問題,一般建議直接將GetMessage函數的傳回值作為條件陳述式放入while中,以減少錯誤。

所以,正確的寫法應該寫為:

while (GetMessage(&msg, NULL, 0, 0))
    {
      TranslateMessage(&msg);
      DispatchMessage(&msg);
    }
    return&msg.wParam;

 

windows編程中關於“關閉視窗無法退出進程”的解決方案

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.