来自 :: 命名空间的 MFC 函数?

MFC Functions from :: namespace?

我不久前开始使用 MFC,我遇到了函数或方法,它们在函数名称之前用“::”调用。这是什么?

例如:

::SendMessage()

那个范围是什么?如果我想,我该如何定义?

谢谢

:: 指的是 global 命名空间。

::SendMessage() 表示在全局命名空间中可用的方法。它不受任何特定范围的限制 class。

函数名称前的 :: 指定使用来自 全局命名空间 的函数,而不是特定 class 的成员函数。正如您所发现的,这在 MFC headers/source.

中被广泛使用

其实原因很简单。让我们考虑 CWnd class,它有一个带有以下签名的 SendMessage 成员函数:

class CWnd : public CObject {
//...
    LRESULT SendMessage(UINT msg, WPARAM wParam, LPARAM lParam);
//...
}

此函数的实现可以简单地将控制传递给同名的非MFC、全局WinAPI函数。但这有不同的签名:

LRESULT SendMessage(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam);

所以,当成员函数调用这个非MFC对象时,第一个参数是它的'own'HWND对象,:: 前缀用于向任何未来的编码人员表明正在调用非 MFC 函数:

LRESULT CWnd::SendMessage(UINT msg, WPARAM wParam, LPARAM lParam)
{
    return ::SendMessage(m_hWnd, msg, wParam, lParam); // Clarifies that we're using a non-class function.
}

随时要求进一步解释and/or澄清。