gpt4 book ai didi

c++ - MFC - 消息框重载

转载 作者:行者123 更新时间:2023-11-30 00:45:49 25 4
gpt4 key购买 nike

我正在编写一个简单的 MFC 应用程序,我注意到一些奇怪的事情:

如果我尝试在按钮事件处理程序中使用 MessageBox 函数,我需要 3 个参数:MessageBox(LPCTSTR, LPCTSTR, UINT);

相反,如果我尝试在表单类之外的函数中使用 MessageBox,我需要 4 个参数:MessageBox(HWND, LPCTSTR, LPCTSTR, UINT);

它是如何工作的?

最佳答案

这是因为CButton继承自CWnd,其中包含一个方法:

https://msdn.microsoft.com/pl-pl/library/0eebkf6f.aspx

  int MessageBox(
LPCTSTR lpszText,
LPCTSTR lpszCaption = NULL,
UINT nType = MB_OK
);

它的实现实际上调用了一个全局版本(你问题中的第二个版本),这个调用中使用的 HWND 将从 CWnd 中获取。您可以在 Visual Studio 目录中的 MFC 源中查找此函数的实现,它在 Visual Studio 2015 下如下所示:

int CWnd::MessageBox(LPCTSTR lpszText, LPCTSTR lpszCaption, UINT nType)
{
if (lpszCaption == NULL)
lpszCaption = AfxGetAppName();
int nResult = ::MessageBox(GetSafeHwnd(), lpszText, lpszCaption, nType);
return nResult;
}

另一方面,如果您调用一个自由函数(全局函数),您必须自己提供 hwnd。

[编辑]

正如 xMRi 在评论中指出的那样,在 MFC 应用程序中 AfxMessageBox应该使用而不是 MessageBox(::MessageBox 和 CWnd::MessageBox - 它们是相同的)。原因是 AfxMessageBox 是 MFC 对话框,因此它可以很好地与整个 MFC 基础结构配合使用,而::MessageBox 来自 WinAPI,它实际上对 MFC 一无所知。

关于c++ - MFC - 消息框重载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41552317/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com