【问题标题】:Win32 : MDI & Exit Code 18 (0x12)Win32 : MDI & 退出代码 18 (0x12)
【发布时间】:2015-10-20 03:30:50
【问题描述】:

我是一名初学者,并试图通过遵循一些教程来学习 win32 API。 我创建了一个 MDI 窗口。

但是,我的窗口应用程序以代码 18 (0x12) 退出。

Native' 已退出,代码为 18 (0x12)。

我不知道为什么它没有以代码“0”退出。

我将 PostQuitMessage ( WM_QUIT ) 替换为 PostQuitMessage ( 0 ),问题就解决了。

下一个问题是:

  1. PostQuitMessage(WM_QUIT) 和 PostQuitMessage(0)?

  2. 如何只打开一个相同的子菜单子窗口。

Can Open same submenu twice

【问题讨论】:

  • 第一步,查看 <winerror.h> 以找到该错误代码,和/或使用 Microsofts errlook` 实用程序,和/或在 C++ 或 PowerShell 中创建一个(在 C++ 中,您' d 调用FormatMessage 并显示结果)。
  • ERROR_NO_MORE_FILES 18 (0x12) 没有更多文件。这是什么意思??
  • 这听起来像是来自枚举函数的东西,并且看到您的代码没有调用这样的函数,它似乎不相关。但它可以帮助你,而且经常这样做。这是我使用错误代码的第一步。我不明白它是从哪里来的。很奇怪。
  • 你不会做很多错误检查。为什么不呢?
  • @David Heffernan,因为我是新手,不知道如何检查错误

标签: winapi mdi


【解决方案1】:

您的WinMain() 函数返回GetMessage() 收到的最后一条消息的wParam 值,即WM_QUIT。它的wParam 值在对PostQuitMessage() 的调用中指定。您将 WM_QUIT 作为该值传递,而不是 0:

case WM_DESTROY:
    PostQuitMessage(WM_QUIT);
    return 0;

WM_QUIT 的数值为 18 (0x12):

#define WM_QUIT                         0x0012

这就是您的程序以代码 18 退出的原因。

【讨论】:

  • 谢谢,PostQuitMessage(WM_QUIT) 和 PostQuitMessage(0) 有什么区别?
  • 只是将wParam 值分配给发布的WM_QUIT 消息的区别。您可以将其设置为您想要的任何值,但由于您的代码从 WinMain() 返回该值,因此您必须将其设置为您想要返回的任何退出代码。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-05-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多