提问人:ark1974 提问时间:6/14/2022 最后编辑:ark1974 更新时间:6/25/2022 访问量:182
如何在旧版 MFC 代码的事件处理程序中添加回调?
How to add a callback in an event handler in a legacy MFC code?
问:
这是使用 MFC 的旧代码的玩具实现。 是一个事件处理程序,但它包含在不同的线程中异步执行的代码(可能是一个坏主意)。声明语法被消息映射接受。OnBnClickedButton
//declaration
afx_msg void OnBnClickedButton();
//message map
ON_BN_CLICKED(IDC_BUTTON, &CMFCApplicationDlg::OnBnClickedButton)
现在我想像这样向事件处理程序添加回调,但是消息映射不接受新的声明语法,该去哪里?
afx_msg void OnBnClickedButton(std::optional<std::function<CString(void)>> callback);
答:
4赞
IInspectable
6/14/2022
#1
MFC 消息映射中条目的函数签名和返回值是固定的。您必须遵守协议;它不提供任何自定义点。对于按钮处理程序,原型必须遵守以下签名ON_BN_CLICKED
afx_msg void memberFxn();
它不接受或返回任何值。唯一可用的状态是消息映射条目(即 每当单击 with ID 表示的对话框的子控件时,都会调用。OnBnClickedButton
CMFCApplicationDlg
IDC_BUTTON
在你的实现中,你可以自由地做任何你喜欢的事情,比如查询其他信息(例如,从类实例或线程本地存储中存储的数据中),显式或使用C++20协程启动线程,等等。OnBnClickedButton
MFC 不会为您提供任何帮助,特别是它不为异步操作提供任何类型的支持。这是您必须自己实现的事情。
评论