【问题标题】:What is private MFC and why are they not accessible through the normal interface?什么是私有 MFC,为什么不能通过普通界面访问它们?
【发布时间】:2010-01-11 21:16:13
【问题描述】:

我正在使用 MFC 进行 gui 开发,我偶然发现了一个可能对我正在尝试做的事情有用的函数。该函数是_AfxCompareClassName。但是,它包含在位于目录“VC/altmfc/src/mfc/afximpl.h”中的文件“afximpl.h”中。正常的 mfc 包含在目录“VC/atlmfc/include”中。

现在,根据我收集的信息,位于 src/mfc 中的那些文件和函数被认为是私有 mfc (according to this guy),我不应该使用它们。为什么 ?这个功能看起来不错。这将帮助我了解我目前在 UI 中的哪个位置。

最终我想做的是在编辑文本字段时更改转义/返回键的行为(编辑控件)。我的问题如下:

  • 什么是私有 MFC 函数?
  • 我为什么不应该使用这些函数(根据我收集的信息,它们经常变化,所以这就是为什么我不应该使用它们。还有其他原因吗?)
  • 有没有更简洁的方法来做我想做的事情?

我希望获得一些关于私有 MFC 的信息,因为到目前为止似乎没有任何关于 SO 的信息。

非常感谢, JC

【问题讨论】:

    标签: c++ mfc afx


    【解决方案1】:

    “私有”MFC 文件是 MFC 的实现细节。正如您不希望或期望您的类的用户获得私有数据或方法一样,您不应该依赖 MFC 实现级实用程序代码。请注意,您可以在 MFC 实现细节中找到的几乎所有很酷的东西都可以在某个地方公开获得。你只需要挖掘。

    MFC 中有内置功能可以满足您的需求。它被称为RUNTIME_CLASS,这是来自 MSDN 的示例代码:

    // Example for RUNTIME_CLASS
    CRuntimeClass* prt = RUNTIME_CLASS( CAge );
    ASSERT( lstrcmp( prt->m_lpszClassName, "CAge" )  == 0 );
    

    【讨论】:

      【解决方案2】:

      它是“私有的”,因为它位于源代码树而不是外部包含文件夹中。

      您不应该使用这些文件中定义的函数,因为它们是 MFC 实现的内部函数,并且很可能会发生变化。

      如果您确实需要该功能,您可以复制代码(具有足够的属性)并将其放入您的一个类中,尽管这远非理想。我也会重命名函数。

      【讨论】:

        猜你喜欢
        • 2012-06-23
        • 2021-05-21
        • 2013-01-23
        • 1970-01-01
        • 2010-11-17
        • 2021-07-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多