我在MFC程序的资源编辑器中创建了一个按钮。
我给它一个ID。
我在ID
的代码中使用了ID
我很高兴。
我回到编辑 我改变了ID 即使重建,代码也不会确认新名称 我换了一些旗子(tabstop) 代码仍然不在乎
为了让ID名称更改传播到代码,我必须更改同一个保存中的ID和任何其他字段。只有这样才意识到它是脏的并更新资源表。
这对我和我的学生来说是100%可重复的。电脑。这种解决方法让这个课程停滞不前,但......这到底是什么?
Visual Studio Enterprise 2015 版本14.0.23107.0 D14REL
答案 0 :(得分:3)
如果您更改资源控件的名称,它将不会像您已经学过的那样在整个源代码中传播它。
理想情况下,您需要使用 VisualAssist 之类的内容:http://www.wholetomato.com/
它允许您重命名资源ID值
您需要使用的是重构。如果您在IDE中打开资源文件作为文本文件(而不是资源编辑器)并找到您的控件,您应该能够右键单击它并选择重构(VA):< / p>
然后选择重命名。它应该预览各种源代码文件中的更改:
您可以使用相同的过程重命名变量和方法声明。
答案 1 :(得分:0)
虽然给出的答案很好,但它没有显示更新资源ID时幕后发生的情况。
.RC
文件)读取。)此标题如下所示:
//{{NO_DEPENDENCIES}}
// Microsoft Visual C++ generated include file.
// Used by MFCApplication1.rc
//
#define IDR_MAINFRAME 128
#define IDM_ABOUTBOX 0x0010
#define IDD_ABOUTBOX 100
#define IDS_ABOUTBOX 101
#define IDD_MFCAPPLICATION1_DIALOG 102
// Next default values for new objects
//
#ifdef APSTUDIO_INVOKED
#ifndef APSTUDIO_READONLY_SYMBOLS
#define _APS_NEXT_RESOURCE_VALUE 129
#define _APS_NEXT_CONTROL_VALUE 1000
#define _APS_NEXT_SYMED_VALUE 101
#define _APS_NEXT_COMMAND_VALUE 32771
#endif
#endif
因此,当您在对话框(或任何其他表单)上添加新控件并将其命名为IDC_DOWNLOAD_NOW
并保存资源时,此标头将更新如下:
#define IDR_MAINFRAME 128
#define IDC_DOWNLOAD_NOW 1000
此外,内部变量(如_APS_NEXT_CONTROL_VALUE
更新)。
嗯..当你在其他对话框中有相同的符号时,VS将只使用具有相同值的相同宏。您在具有相同名称的第三个对话框上添加另一个按钮,它也不会修改resource.h
。
但是......当您在这3个对话框中修改控件名称与IDC_DOWNLOAD_LATER
类似时,只有.RC
和resource.h
会更新。旧的价值和旧的用法仍然存在。你不会得到任何编译器错误(因为宏存在!)。
#define IDR_MAINFRAME 128
#define IDC_DOWNLOAD_NOW 1000
#define IDC_DOWNLOAD_LATER 1001
在另一种情况下,当您删除按钮(来自3个对话框中的任何一个)时,程序将正常编译,但GetDlgItem
,DDX_Control
等将在运行时失败(自IDC_DOWNLOAD_NOW
起在当前对话框中不存在!)
现在想想如果你使用任何工具批量重命名符号会发生什么 - 繁荣 - 现在所有资源都有IDC_DOWNLOAD_LATER
!
答案 2 :(得分:0)
以下是处理 IDC_STATIC 特定问题的第二种方法。您的问题应该修改为包含此内容。
我已经启动了一个临时对话项目,并选择了默认的静态文本:
如您所见,它标记为 IDC_STATIC 。我现在直接在资源编辑器中更改ID值,然后点击 enter 键:
然后我保存它(这会更新resource.h文件)。然后,如果我使用名为 ResOrg 的应用程序
,我们会看到这一点如您所见,resource.h文件是正确的。现在,您现在添加变量。
有趣的是,IDE实际上并不允许您向IDC_STATIC对象添加变量。但假设你有两个:
您仍然可以重命名每个,保存文件,重新构建和查看资源文件:
正如你所看到的,它仍然很好。此时您可以立即添加变量和事件处理程序。在这种情况下,VisualAssist将用于重命名整个应用程序中使用的变量/ ID。
我不确定是否使用此附加信息编辑现有答案。也许这可能更好?