【发布时间】:2009-03-17 02:13:54
【问题描述】:
我正在尝试更好地了解宏在现代 C++ 和 Visual C++ 中的位置(如果有),还参考了 Windows 编程库:什么问题(如果有)宏解决了这些不使用就无法解决的情况?
我记得在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()
我在 MSDN 上阅读了 these articles 与宏有关的内容,但我也在尝试学习编写或避免宏以及在何处/何时使用它们的最佳实践。
【问题讨论】:
-
感谢所有回复,“答案”分布在下面的所有三个回复中,这可能是我的问题碎片化的结果。将 jeffamaphone 的帖子标记为他的第一个答案,并解释了 MSG_WM_* 行为。
标签: c++ visual-c++ macros c-preprocessor