ON_BN_CLICKED调用非成员函数

ON_BN_CLICKED Call Non-Member Function

ON_BN_CLICKED 宏接受一个按钮 ID 和一个成员函数指针。单击按钮时调用成员函数。

我有一个成员函数,foo,我把它的指针传递给了ON_BN_CLICKED:

ON_BN_CLICKED(1485, &foo)

但是 foo 只是直接在 class 外部调用我的业务逻辑函数:

void presentation::foo() {
    business->foo();
}

我想设置ON_BN_CLICKED直接调用这个业务逻辑函数。这可能吗?

你可以,但我不鼓励。如果您正在考虑提高性能,编译器可能会优化额外的调用。如果你分解 ON_BN_CLICKED 宏,你会看到它最终成为 BEGIN_MESSAGE_MAP...END_MESSAGE_MAP 数组中的一个数组条目,其中有 CCmdTarget 函数指针.所以,如果你的 business class 是从 CCmdTarget 派生的,你可以避免一些转换问题并直接调用它。一种更简单的方法可能是让您自己的 WM_COMMAND 处理 and/or 不依赖于消息映射机制并执行您自己的 window 过程。但这同样是大量工作却收效甚微。