gpt4 book ai didi

c++ - 宏和 Visual C++

转载 作者:太空宇宙 更新时间:2023-11-04 15:28:58 25 4
gpt4 key购买 nike

我试图更好地了解宏在现代 C++ 和 Visual C++ 中的位置(如果有的话),同时引用 Windows 编程库:What problem (if any) do宏在这些不使用它们就无法解决的情况下解决?

我记得从 this blog post 读到关于 Google Chrome 对宏的 WTL 的使用(以及其他事情) , 它们也用在 MFC 中——这里是该博客文章中的一个宏示例,如果可能的话,我想详细解释一下:

// CWindowImpl
BEGIN_MSG_MAP(Edit)
MSG_WM_CHAR(OnChar)
MSG_WM_CONTEXTMENU(OnContextMenu)
MSG_WM_COPY(OnCopy)
MSG_WM_CUT(OnCut)
MESSAGE_HANDLER_EX(WM_IME_COMPOSITION, OnImeComposition)
MSG_WM_KEYDOWN(OnKeyDown)
MSG_WM_LBUTTONDBLCLK(OnLButtonDblClk)
MSG_WM_LBUTTONDOWN(OnLButtonDown)
MSG_WM_LBUTTONUP(OnLButtonUp)
MSG_WM_MBUTTONDOWN(OnNonLButtonDown)
MSG_WM_MOUSEMOVE(OnMouseMove)
MSG_WM_MOUSELEAVE(OnMouseLeave)
MSG_WM_NCCALCSIZE(OnNCCalcSize)
MSG_WM_NCPAINT(OnNCPaint)
MSG_WM_RBUTTONDOWN(OnNonLButtonDown)
MSG_WM_PASTE(OnPaste)
MSG_WM_SYSCHAR(OnSysChar) // WM_SYSxxx == WM_xxx with ALT down
MSG_WM_SYSKEYDOWN(OnKeyDown)
END_MSG_MAP()

我读过 these articles与 MSDN 上的宏有关,但我也在尝试获取编写或避免宏以及在何处/何时使用它们的最佳实践。

最佳答案

所有这些宏都在公共(public) sdk 头文件中定义,因此您可以根据需要自行阅读它们的作用。基本上,这里发生的是您使用宏生成 WndProc 函数。每个 MSG_WM_* 条目都是一个 case 语句,它通过将其参数从 wParam 和 lParam 翻译成它们的原始类型并调用一个将这些类型作为参数(如果合适的话——一些窗口消息有 0 个或 1 个参数)。

在我看来,这一切都是废话。您正在权衡不得不预先编写一堆样板,但作为交换,您以后很难进行调试。宏在我的现代编程世界中没有太多用处,除了检查它们是否被定义之外。做流量控制的宏,或者假设特定的局部变量总是被定义等,让我很不高兴。尤其是当我必须调试它们时。

关于c++ - 宏和 Visual C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/652813/

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