VS / MFC仍然使用“afx_msg”装饰器吗?

时间:2009-02-23 16:31:54

标签: c++ visual-studio mfc

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

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

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

还有其他原因继续使用afx_msg及其类似的吗?

4 个答案:

答案 0 :(得分:10)

afx_msg仍然存在,但一直都是纯粹的信息。你装的装饰师。它总是被#defined定义为一个空字符串。

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

答案 1 :(得分:2)

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

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

PS:MS很清楚当前CW编辑的问题,我告诉他们将在很大程度上解决VS2010 ...我们将会看到。

答案 2 :(得分:1)

AFAIK不再需要这些了。 VS2008中的类向导将不再生成注释,并且不会使用先前版本生成的现有注释。类向导仍将生成afx_msg装饰器,但不使用它们。

我在处理VC6天代码时的一般规则是删除所有注释,但要离开afx_msg装饰器。我发现装饰器在读取代码时很有用,指出方法是一个消息处理程序。

答案 3 :(得分:0)

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