【问题标题】:Are things like "afx_msg" decorators still used by VS/MFC?VS/MFC 还在使用诸如“afx_msg”装饰器之类的东西吗?
【发布时间】:2010-10-09 08:41:42
【问题描述】:

我正在开发一个 MFC 程序,该程序早在 VC6 时代就开始了。那时有一个类向导,它在 cmets 中使用了一堆装饰器和标记来解析类文件。

例如,它会在它维护的消息处理程序前面插入 afx_msg。它会用 //{{AFX_MSG_MAP(TheApp)/}}AFX_MSG_MAP cmets 标记一段代码,以帮助它找到它想要处理的消息映射部分.

AFAIK,这不再需要了。除此之外,类向导还有很多缺点,我们不得不对这些托管块进行大量手动编辑,而且我们从来没有经常使用它。

还有其他理由继续使用 afx_msg 及其同类产品吗?

【问题讨论】:

    标签: c++ visual-studio mfc


    【解决方案1】:

    afx_msg 仍然存在,但一直是纯粹的信息。正如你所说的装饰师。它一直被#定义为空字符串。

    自 VS2003 起不再需要 {{ 和 }} 标记:VS 现在足够聪明,可以将东西放在正确的位置,而无需依赖这些标记。您会注意到 VS2003+ 在它创建的项目中不再包含这些行。

    【讨论】:

      【解决方案2】:

      AFAIK,不再使用 afx_msg。另一个标记用于帮助 CW 找出放置东西的位置,其中一些可能仍会使用(例如:.cpp 文件中的消息映射位置)。头文件中的可能更安全删除,但我不会随意将它们取出。

      您可以做的一件事:在您当前的 VS 版本中启动一个新的虚拟 MFC 项目,添加一个窗口类和一些处理程序,并观察当前创建的符号。没有放入的东西可能不再使用,仍然插入的东西可能仍然以某种形式使用)。

      PS:MS 很清楚当前 CW 编辑存在的问题,我听说它们将在 VS2010 中得到很大程度的解决……我们拭目以待。

      【讨论】:

        【解决方案3】:

        AFAIK 这些不再需要了。 VS2008 中的类向导将不再生成 cmets,也不会使用以前版本生成的现有 cmets。类向导仍然会生成 afx_msg 装饰器,但是它们没有被使用。

        在处理 VC6 时代的代码时,我的一般规则是删除所有 cmets,但保留 afx_msg 装饰器。我发现装饰器在阅读代码时很有用,可以指出方法是消息处理程序。

        【讨论】:

          【解决方案4】:

          在 VS2008 中,afx_msg 是一个空的#define。我已经从我们从 VC6 升级到 2005 的应用程序中删除了所有其他插入类向导的 deck。当然,我也根本不使用类向导。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2015-11-04
            • 1970-01-01
            • 2013-03-01
            • 2012-03-20
            • 2013-06-22
            • 1970-01-01
            • 1970-01-01
            • 2013-08-09
            相关资源
            最近更新 更多