Không có đoạn mã nào là chính xác. Việc đầu tiên sẽ làm những gì các thủ tục cửa sổ mặc định đã làm khi nó xử lý tin nhắn WM_CLOSE như vậy là thừa. Nhưng nếu không làm cho ứng dụng thoát, nó sẽ tiếp tục chạy và bạn thường phải ép buộc trình gỡ lỗi dừng lại với Debug + Stop Debugging. Nếu bạn chạy nó mà không có một trình gỡ lỗi thì bạn sẽ để lại quá trình đang chạy nhưng không có một cửa sổ để bạn không thể biết nó đang chạy. Sử dụng tab Taskmgr.exe, Quy trình để xem các quy trình zombie đó.
Đoạn thứ hai sẽ chấm dứt ứng dụng nhưng sẽ không dọn dẹp đúng cách vì bạn không chuyển thông điệp WM_CLOSE đến quy trình cửa sổ mặc định. Cửa sổ không bị phá hủy. Mặc dù hệ điều hành sẽ dọn dẹp cho bạn vì vậy tất cả sẽ kết thúc tốt đẹp, chỉ cần không có bất kỳ điểm thưởng nào cho sự sang trọng.
Cách thích hợp để thực hiện việc này là thoát khi cửa sổ chính của bạn bị hủy. Bạn sẽ biết điều đó từ thông báo WM_DESTROY được gửi khi điều đó xảy ra:
case WM_DESTROY:
PostQuitMessage(0);
return 0;
Nguồn
2013-05-25 12:04:53
Hãy xem xét điều gì có thể xảy ra trong một ứng dụng có nhiều cửa sổ. 'DestroyWindow' phá hủy một cửa sổ. 'PostQuitMessage' ... đăng một thông điệp thoát: có nghĩa là nó cho biết toàn bộ ứng dụng muốn thoát. – jalf
@jalf, tôi đã * chỉ * chỉnh sửa nội dung đó vào câu trả lời của tôi: p – chris
@chris và tôi vừa mới bỏ phiếu cho câu trả lời của bạn. :) – jalf