如果我尝试将对话框从一个项目移动到另一个项目,是不是需要从 rc 文件中复制 DESIGNINFO、对话框信息和 AFX_DIALOG_LAYOUT 相关代码?

Posted

技术标签:

【中文标题】如果我尝试将对话框从一个项目移动到另一个项目,是不是需要从 rc 文件中复制 DESIGNINFO、对话框信息和 AFX_DIALOG_LAYOUT 相关代码?【英文标题】:Do I need to copy DESIGNINFO, Dialog Info and AFX_DIALOG_LAYOUT related code from rc file if I try to move a dialog from one project to another?如果我尝试将对话框从一个项目移动到另一个项目,是否需要从 rc 文件中复制 DESIGNINFO、对话框信息和 AFX_DIALOG_LAYOUT 相关代码? 【发布时间】:2018-03-23 02:23:32 【问题描述】:

我正在处理一个 MFC VS2013 项目,尝试将一些对话框从一个项目移动到另一个项目。我的以下步骤是:

找到此对话资源 ID(例如 IDD_DIALOG1)

在项目名称.rc 文件中搜索此 ID

将相关代码复制到目标project.rc文件中

将相关的 *.h 和 *.cpp 文件复制到目标项目

现在我的问题是,当我搜索 projectname.rc 文件时。实际上我在这个文件中找到了几个与这个 ID 相关的地方。我需要将所有这些位置移动到新的资源文件吗?还是我只需要移动 location1 的代码? location2,3,4是什么意思?

//Location1:
//
// Dialog
//

IDD_DIALOG1 DIALOGEX 0, 0, 239, 190
STYLE DS_SETFONT | WS_CHILD | WS_DISABLED | WS_CAPTION
CAPTION "Settings"
FONT 9, "Tahoma", 0, 0, 0x0
BEGIN
    CONTROL         " Default to Use",IDC_CHECK_USE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,6,6,222,8
    GROUPBOX        "Test2",IDC_STATIC,6,18,228,48,NOT WS_VISIBLE
    LTEXT           "Test1:",IDC_STATIC,12,32,132,8
    EDITTEXT        IDC_GES_EDIT_PROC_INTERVAL,150,30,78,12,ES_AUTOHSCROLL | WS_GROUP
......
END

//Location2:
//
// DESIGNINFO
//

#ifdef APSTUDIO_INVOKED
GUIDELINES DESIGNINFO
BEGIN
    IDD_DIALOG1, DIALOG
    BEGIN
        LEFTMARGIN, 7
        RIGHTMARGIN, 231
        TOPMARGIN, 7
        BOTTOMMARGIN, 186
    END
END
#endif    // APSTUDIO_INVOKED

//Location3:
//
// Dialog Info
//

IDD_DIALOG1 DLGINIT
BEGIN
    IDC_GDD_COMBO_ANGLE, 0x403, 5, 0
0x6f4e, 0x656e, "\000" 
...
    0
END

//Location4:
//
// AFX_DIALOG_LAYOUT
//

IDD_DIALOG1 AFX_DIALOG_LAYOUT 
BEGIN
    0x0000
END

【问题讨论】:

#ifdef APSTUDIO_INVOKED -- 我不建议尝试使用 APP studio 创建的资源文件并手动编辑或模仿它。 Visual Studio 的资源编辑器可以重新生成DESIGNINFO 信息,不需要复制。我认为棘手的部分是复制 ID。 VS 喜欢自己创建资源 ID,它使用 _APS_NEXT_RESOURCE_VALUE 等其他值来跟踪。如果发生不可逆转的故障,您应该制作备份副本。 【参考方案1】:

您需要复制除 DESIGNINFO 之外的所有内容(意思是:所有其他内容都是必需的,DESIGNINFO 可能有用)。这些信息只是为资源定义的帮助线和边距。它们没有被编译并且在运行时不需要。它们在设计时很有帮助。

将资源从一个资源复制到另一个资源的最简单方法是在同一个 Visual Studio 会话中打开两个 rc 文件。然后选择一个对话框复制并粘贴到第二个 RC 文件中。这将复制您需要的所有内容,包括所需的 ID。

【讨论】:

值得注意的是,DESIGNINFO(可选)可以被复制,这样您就可以在新项目的资源编辑器中获得相同的设计时体验。在这种特殊情况下,它仅包含默认对话框边距,这有助于创建外观一致的 UI。 改变了我的答案

以上是关于如果我尝试将对话框从一个项目移动到另一个项目,是不是需要从 rc 文件中复制 DESIGNINFO、对话框信息和 AFX_DIALOG_LAYOUT 相关代码?的主要内容,如果未能解决你的问题,请参考以下文章

将 Google Cloud Platform 项目从一个帐户移动到另一个帐户

将 android 项目从 pc 移动到另一个,Firebase Auth 问题? [复制]

怎样将对话框中一个列表控件中的内容移动到另一个列表控件中?

如何将项目从一个菜单移动到另一个菜单?

如何将数据直接从一个 Google Cloud Storage 项目移动到另一个?

如何使用 Vue draggable 将组件列表中的项目拖动到另一个组件中的列表?