龙空技术网

为什么我的对话框创建失败了?典型错误1

漫漫开发路 34

前言:

当前各位老铁们对“电脑新建文件夹失败”可能比较注重,看官们都想要剖析一些“电脑新建文件夹失败”的相关知识。那么小编也在网摘上网罗了一些关于“电脑新建文件夹失败””的相关资讯,希望同学们能喜欢,朋友们一起来了解一下吧!

对话框中的资源要么被定义为一个整数,要么被定义为一个字符串。

仅仅一个简单的错误将会将其中的一个类型错误的变成另一个类型。我们来看一个例子。

你是否能发现其中的两处 “菜鸟级错误” ?

如果先获取资源文件并发送给预处理器,可能会更容易发现这个问题。

对 DialogBox 的第一次调用将 TEXT(“DLG_OPEN”) 作为资源名称传递。但请注意,没有具有该名称的资源。由于头文件中的第 #define DLG_OPEN 1 行,预处理器将 DLG_OPEN 变为 1。因此,对 DialogBox 的调用失败,因为没有名为 DLG_OPEN 的对话框。所需的对话框采用整数名称 1。

DialogBox(hInstance, MAKEINTRESOURCE(DLG_OPEN), hwnd, OpenDialogProc);

第二个错误更微妙。请注意,第二个对话框的名称拼写不一致。头文件称其为 DLG_WARN_REMOVEABLE,但资源文件称其为 DLG_WARN_REMOVABLE。因此,不会调用预处理器宏,结果是字符串名称为 TEXT(“DLG_WARN_REMOVABLE”) 的对话框。但是,代码会请求 MAKEINTRESOURCE(DLG_WARN_REMOVEABLE),该资源不存在。

要解决第二个问题,您首先必须确定您真正想要什么。您可能需要一个整数对话框资源,在这种情况下,解决方法是更正资源文件:

DLG_WARN_REMOVEABLE DIALOG 32, 32, 267, 73

另一方面,如果你真的希望对话框是一个命名资源(注意:这是非常罕见的),那么你需要按名称请求它:

DialogBox(hInstance, TEXT(“DLG_WARN_REMOVABLE”), hwnd, WarnRemoveableDialogProc);

在接下来的几天里,我们将再看看一些 “菜鸟错误”。

总结

请谨慎修改工程的资源定义文件(.rc文件),最好还是交给开发环境来自动维护。

机器在这方面(“老老实实的工作”)比人强。

最后

Raymond Chen的《The Old New Thing》是我非常喜欢的博客之一,里面有很多关于Windows的小知识,对于广大Windows平台开发者来说,确实十分有帮助。

本文来自:《Why can’t I create my dialog box? Rookie mistake #1》

标签: #电脑新建文件夹失败 #为什么新建文件夹会失败