如何指示窗口过程中处理消息时出现的错误?

2024-04-28

我目前正在编写一个库来处理来自原始输入 API 的信息,并且我正在使用级联函数。这导致了几个非常小、非常可读且非常集中的函数。

但是,它让我震惊,我不明白如何properly表明 Windows 出现故障。我有这个功能:

/* OnInput: Handle data received from Windows via a `WM_INPUT` message. */
static LRESULT CALLBACK OnInput(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
    BOOL DispatchRawInput(CONST PRAWINPUT);

    assert(msg == WM_INPUT);

    return DefWindowProc(hWnd, msg, wParam, lParam);
}

它返回零正如文件所述,它应该 http://msdn.microsoft.com/en-us/library/windows/desktop/ms645590.aspx;但这是假设成功的。

实际文本指出:

“如果应用程序处理此消息,它应该返回零。”

但如果我该怎么办can't处理它?我原本以为你会打电话DefWindowProc就这样吧,但这并不向 Windows 发出发生了任何事情的信号。

消息WM_CREATE似乎是我能找到的唯一返回非零值的实例:

“如果应用程序处理此消息,它应该返回零以继续创建窗口。如果应用程序返回 –1,则窗口被销毁,并且 CreateWindowEx 或 CreateWindow 函数返回 NULL 句柄。”

错误处理真的只取决于程序员/团队,而不需要通知操作系统吗?像这样的事件怎么样WM_CREATE失败并需要阻止创建窗口?


如果这是一个致命错误,那么您应该像其他致命错误一样处理它:以某种方式通知用户该错误(MessageBox, stderr等)和exit() or abort().

如果这是一个非致命错误,那么您需要将其传达回您的应用程序,这可以通过多种方式完成:设置标志、调用函数、发布WM_APP消息等,您的应用程序应该处理它。总而言之,Windows 并不真正关心,您有责任以合理的方式处理错误。

如果您正在编写供其他人使用的库,请确保您的应用程序具有明确定义和记录的错误过程。如果您的库中发生内部错误,则允许应用程序指定错误回调,然后调用该回调并让应用程序处理它。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何指示窗口过程中处理消息时出现的错误? 的相关文章

  • 使用 C# 登录《我的世界》

    我正在尝试为自己和一些朋友创建一个简单的自定义 Minecraft 启动器 我不需要启动 Minecraft 的代码 只需要登录的实际代码行 例如 据我所知 您过去可以使用 string netResponse httpGET https
  • 如何捕获未发送到 stdout 的命令行文本?

    我在项目中使用 LAME 命令行 mp3 编码器 我希望能够看到某人正在使用什么版本 如果我只执行 LAME exe 而不带参数 我会得到 例如 C LAME gt LAME exe LAME 32 bits version 3 98 2
  • 以编程方式读取 SQL Server 查询计划建议的 SQL 特定执行的索引?

    如果我在 SSMS 中运行此命令 set showplan xml on GO exec some procedure arg1 arg2 arg3 GO set showplan xml off GO 我获得查询执行中涉及的完整调用堆栈的
  • ComboBox DataBinding 导致 ArgumentException

    我的几个类对象 class Person public string Name get set public string Sex get set public int Age get set public override string
  • 如何判断计算机是否已重新启动?

    我曾经使用过一个命令行 SMTP 邮件程序 作为试用版的限制 它允许您在每个 Windows 会话中最多接收 10 封电子邮件 如果您重新启动计算机 您可能还会收到 10 个以上 我认为这种共享软件破坏非常巧妙 我想在我的应用程序中复制它
  • 查看 NuGet 包依赖关系层次结构

    有没有一种方法 文本或图形 来查看 NuGet 包之间的依赖关系层次结构 如果您使用的是新的 csproj 您可以在此处获取所有依赖项 在项目构建后 项目目录 obj project assets json
  • C# 数据表更新多行

    我如何使用数据表进行多次更新 我找到了这个更新 1 行 http support microsoft com kb 307587 my code public void ExportCSV string SQLSyntax string L
  • 使用 GCP 的数据存储区时如何区分代码是在模拟器中运行还是在 GKE 中运行

    按照中给出的说明进行操作后 我不确定是否遗漏了任何内容https cloud google com datastore docs tools datastore emulator https cloud google com datasto
  • Python 属性和 Swig

    我正在尝试使用 swig 为一些 C 代码创建 python 绑定 我似乎遇到了一个问题 试图从我拥有的一些访问器函数创建 python 属性 方法如下 class Player public void entity Entity enti
  • File.AppendText 尝试写入错误的位置

    我有一个 C 控制台应用程序 它作为 Windows 任务计划程序中的计划任务运行 此控制台应用程序写入日志文件 该日志文件在调试模式下运行时会创建并写入应用程序文件夹本身内的文件 但是 当它在任务计划程序中运行时 它会抛出一个错误 指出访
  • C# 存档中的文件列表

    我正在创建一个 FileFinder 类 您可以在其中进行如下搜索 var fileFinder new FileFinder new string C MyFolder1 C MyFolder2 new string
  • 使用valgrind进行GDB远程调试

    如果我使用远程调试gdb我连接到gdbserver using target remote host 2345 如果我使用 valgrind 和 gdb 调试内存错误 以中断无效内存访问 我会使用 target remote vgdb 启动
  • 如何在 Qt 应用程序中通过终端命令运行分离的应用程序?

    我想使用命令 cd opencv opencv 3 0 0 alpha samples cpp cpp example facedetect lena jpg 在 Qt 应用程序中按钮的 clicked 方法上运行 OpenCV 示例代码
  • 等待 IAsyncResult 函数直至完成

    我需要创建等待 IAsyncResult 方法完成的机制 我怎样才能做到这一点 IAsyncResult result contactGroupServices BeginDeleteContact contactToRemove Uri
  • 打印大型 WPF 用户控件

    我有一个巨大的数据 我想使用 WPF 打印 我发现WPF提供了一个PrintDialog PrintVisual用于打印派生的任何 WPF 控件的方法Visual class PrintVisual只会打印一页 因此我需要缩放控件以适合页面
  • OpenGL:仅获取模板缓冲区而没有深度缓冲区?

    我想获取一个模板缓冲区 但如果可能的话 不要承受附加深度缓冲区的开销 因为我不会使用它 我发现的大多数资源表明 虽然模板缓冲区是可选的 例如 排除它以利于获得更高的深度缓冲区精度 但我还没有看到任何请求并成功获取仅 8 位模板缓冲区的代码
  • 实体框架中的“it”是什么

    如果以前有人问过这个问题 请原谅我 但我的任何搜索中都没有出现 它 我有两个数据库表 Person 和 Employee 对每个类型的表进行建模 例如 Employee is a Person 在我的 edmx 设计器中 我定义了一个实体
  • 我可以在“字节数”设置为零的情况下调用 memcpy() 和 memmove() 吗?

    当我实际上没有什么可以移动 复制的时候 我是否需要处理这些情况memmove memcpy 作为边缘情况 int numberOfBytes if numberOfBytes 0 memmove dest source numberOfBy
  • 如何减少具有多个单元的 PdfPTable 的内存消耗

    我正在使用 ITextSharp 创建一个 PDF 它由单个 PdfTable 组成 不幸的是 对于特定的数据集 由于创建了大量 PdfPCell 我遇到了内存不足异常 我已经分析了内存使用情况 我有近百万个单元格的 1 2 在这种情况下有
  • OpenCV SIFT 描述符关键点半径

    我正在深入研究OpenCV的SIFT描述符提取的实现 https github com Itseez opencv blob master modules nonfree src sift cpp 我发现了一些令人费解的代码来获取兴趣点邻域

随机推荐

  • 如何重用现有的持久卷声明

    我已经删除了我的 Elasticsearch 集群 但现在在部署新集群后 我需要访问存储在 3 个持久卷 PV 上的旧数据 如下所述 NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS
  • 手动将歌曲作为音乐曲目添加到 Mediastore

    我想创建一个音乐播放器 可以在线下载歌曲并将其添加到 MediaStore 我正在使用下载管理器并允许 MediaScanner 在下载完成后扫描此文件 DownloadManager Request request request all
  • 如何阻止 AWS API Gateway 对二进制响应进行 Base64 编码?

    我使用 AWS Toolkit 中的项目模板创建了一个 ASP NET Core 应用程序 我将其部署为 AWS Lambda 并注意到响应中的二进制文件采用了 Base64 编码 我在 AWS API Gateway 中添加了正确的媒体类
  • 如何在 PyCharm 中指定 pip 选项以从requirements.txt进行安装

    要从公司代理后面安装 Python 包 有时需要添加选项pip 例如 proxy or cert 如何在 PyCharm 中指定代理的说明见这个问题 https stackoverflow com q 42363175 2311167以及如
  • 使用“touch”创建目录? [关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 1 在 A 目录中 find type f gt a txt 2 在 B 目录中 cat a txt while read FILENAMES do
  • Android 中的 3D 立方体过渡 [关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 我想让一个屏幕 或屏幕的一部分 以类
  • 如何使用 document.getElementsByClassName() 访问

    span class mtb price span
  • 如何在 GNU Make 模式规则中包含路径前缀

    考虑以下 foo bar echo lt gt 假设我们有一个文件1 bar 执行的命令很简单echo 1 bar gt 1 foo 然而 当 包含一个路径 而不仅仅是一个文件名 它开始变得挑剔 我的问题是我想在前面添加另一条路径 bar
  • 如何从 Excel 发送电子邮件中的嵌入图像

    我想从 VB 发送电子邮件 Outlook 正文中的 Excel 图表 不是附件 有人知道该怎么做吗 Solved 只是为了在下面的回答中添加更多细节 您将需要以下内容 可以进行一些改进 Sheets 2 ChartObjects 1 Ch
  • 为 Microsoft SQL Server 创建统计信息时,列顺序重要吗?

    数据库引擎优化顾问建议为我们的几个查询创建一些统计信息 事实证明 其中一些是相同的 只是 CREATE STATISTICS 命令中的列顺序不同 例如 CREATE STATISTICS StatName1 ON dbo table1 co
  • Node.js multer 错误:意外的字段

    我在使用 Node js multer 时遇到了麻烦 我想知道是什么原因导致这个问题 我想我设置了正确的名称input name streamfile 客户端和node js的multer之间upload single streamfile
  • JSF 2.3 CDI 无法在 tomcat 上运行

    每当我使用 inject 时 我都会尝试在 tomcat 8 上设置 jsf 2 3 我一直遇到错误 我已经在 stackoverflow com 上进行了谷歌搜索和搜索 但我找不到解决方案 我已经按照这里的 BalusC 示例安装了 CD
  • 为什么我在elasticsearch中需要“store”:“yes”?

    我真的不明白为什么核心类型链接 http www elasticsearch org guide reference mapping core types 它在属性描述中说 例如 对于数字 store 设置为 yes 将实际字段存储在索引中
  • PHP 中是否存在不调用析构函数的情况?

    这是我第一次在 stackoverflow 上发帖 但这些帖子对我帮助很大 无论如何 关于我的问题 是否有 PHP 中的析构函数未被调用的情况 我问的原因是因为我有一个映射器类 它将数据映射到对象 在构造函数中 我启动一个事务 在析构函数中
  • 第一列未隐藏在 datagridview 中

    我有一个 datagridview 一旦我用数据源填充视图 我就会隐藏不需要的列 由于某种原因 第一列没有隐藏 我已经检查了列名称 它们匹配 并且第二行执行良好 隐藏了 EVENTID 的列 我什至做了一个 messagebox show
  • 如何从 Django 中的 POST 获取之前的 URL

    我有一个 Post 模型 在添加到数据库之前需要特定的类别 并且我希望自动生成该类别 单击 addPost 按钮会将您带到不同的页面 因此将通过上一页 URL 的一部分来确定类别 有没有办法以字符串形式获取上一页 URL 我在这里添加了 A
  • Google api - 如何获取表单中的文本?

    当我打电话时getContent 在表单文件上 它返回空 null 如何获取 Google Drive 中表单文件的文本内容 你是对的 你需要使用表格服务 https developers google com apps script re
  • 显示 python 的 XML 解析器加载大文件时的进度

    我使用 Python 内置的 XML 解析器来加载 1 5 gig XML 文件 这需要一整天的时间 from xml dom import minidom xmldoc minidom parse events xml 我需要知道如何进入
  • 按标签列出的 AWS Cloudfront 分配 ID

    是否可以通过 awscli 或适用于 powershell 的 aws sdk 按标签获取 aws cloudfront dist id 我只能通过资源的 ARN 编号获取 ID aws cloudfront list tags for r
  • 如何指示窗口过程中处理消息时出现的错误?

    我目前正在编写一个库来处理来自原始输入 API 的信息 并且我正在使用级联函数 这导致了几个非常小 非常可读且非常集中的函数 但是 它让我震惊 我不明白如何properly表明 Windows 出现故障 我有这个功能 OnInput Han