ON_BN_CLICKED调用非成员函数

时间:2015-09-28 11:48:46

标签: c++ button mfc click member-function-pointers

ON_BN_CLICKED宏采用按钮ID和成员函数指针。单击该按钮时,将调用成员函数。

我有一个成员函数foo,我已经传递给ON_BN_CLICKED的指针:

ON_BN_CLICKED(1485, &foo)

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

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

我想设置ON_BN_CLICKED来直接调用此业务逻辑功能。这可能吗?

1 个答案:

答案 0 :(得分:2)

你可以,但我不鼓励它。如果您认为性能提升,编译器可能会优化额外的调用。如果您分解ON_BN_CLICKED宏,您会发现它最终成为BEGIN_MESSAGE_MAP ... END_MESSAGE_MAP中数组中的数组条目,其中包含CCmdTarget个函数指针。因此,如果您的business类派生自CCmdTarget,则可以避免一些投射问题并直接调用它。更简单的方法可能是拥有自己的WM_COMMAND处理和/或不依赖于消息映射机制并执行您自己的窗口过程。但这又是很多工作,很少或没有收获。