【问题标题】:How does visual studio associate mfc dialog classes with dialog resources?Visual Studio 如何将 mfc 对话框类与对话框资源相关联?
【发布时间】:2011-01-09 00:55:17
【问题描述】:

我想知道 Visual Studio 如何将MFC CDialog 派生类与其对应的对话框资源相关联。我对在运行时如何建立连接不感兴趣(如here 所问),而是在设计时。

当我将消息处理程序添加到对话框时,它如何知道将处理程序添加到哪个类。 此外,是否可以有多个CDialog 派生类与同一个对话框资源关联,反之亦然?

我已经在项目目录中搜索了 IDD_SOMEDIALOG 字符串,但只在预期位置的 SomeDialog.hresource.hProject.rc 中找到它,所以我猜它以某种方式从这些文件中推断出连接,很可能SomeDialog.h中的枚举:

// in class CSomeDialog:
    enum { IDD = IDD_SOMEDIALOG };

我问这个主要是出于好奇。

【问题讨论】:

    标签: visual-studio mfc dialog visual-c++


    【解决方案1】:

    这取决于开发工作室的版本。

    在 VS6 中,它全部保存在 CLW(类向导文件)中。

    在较新版本的开发工作室中,它不再使用 CLW,我也不知道它是如何知道的,但我怀疑它是实时解析而不是使用缓存的 CLW。

    至于有多个衍生对话框使用相同的资源,可以手动完成。您可以复制创建的类文件并重命名它们并从标题中删除枚举,并编辑源文件中 IDD 枚举的使用,使其成为实际的对话资源 ID (IDD_SOMEDIALOG)。

    AFAIK Dev Studio 一次只会“愉快地”处理一个类到一个对话框。根据我的经验,尝试重用这样的对话资源最终会与 MFC 和 Dev Studio 发生一些争执,因为他们不打算这样做。

    【讨论】:

    • 这绝对是这样,更多细节请查看我的更新。
    【解决方案2】:

    补充鲁迪的回答:

    我注意到我用static const int IDD 替换了enum { IDD } 的一些对话框类不再与其对话框资源相关联。恢复到枚举会重新关联它们。所以看起来visual studio会解析源代码来确定关系。

    对于资源共享,哪个类应该接收事件处理程序代码是模棱两可的。类共享似乎是不可能的,因为它依赖于不能同时分配给IDD_SOMETHINGIDD_SOMETHING_ELSEIDD

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-09-25
      • 1970-01-01
      • 2011-06-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多