MFC C++ 在回调函数中编辑 Windows 控件

Posted

技术标签:

【中文标题】MFC C++ 在回调函数中编辑 Windows 控件【英文标题】:MFC C++ Edit Windows Controls in Callback Function 【发布时间】:2013-05-16 16:18:41 【问题描述】:

我在项目的这一部分卡住了。 我有一个下载对话框,当您双击列表控件时。 我动态创建它,它使用指向处理 FTP 下载/上传过程的类的静态指针。

这里一切都很好。

每个下载过程都使用这个类中的一个线程。我发布一个静态回调函数(线程函数不接受非静态函数)

但我想在这个回调函数中编辑我的 Windows 控件我该怎么办?

提前致谢。

【问题讨论】:

【参考方案1】:

将参数传递给您的线程,即对话框的m_hWnd。然后在线程完成工作后使用PostMessage 向对话框类发送消息以处理其控件的更新。

【讨论】:

是的,将对话框作为参数传递就可以了。我没有这样做,因为我不想弄乱代码。我想没有其他选择。所以我选择这个作为 Anwswer。谢谢!跨度> 【参考方案2】:

查看使用 PostMessage 技术的示例:

http://vcfaq.mvps.org/mfc/12.htm

【讨论】:

我将“this”指针传递给我的函数。我可以编辑一些公共字符串变量等。但我不能使用指向对话框的指针来更改控件,如 MyDlg->blaleditbox1.SetWindowTextA("blabla ");但是一些公共变量效果很好。实际上我不想使用 PostMessage func。因为它使我的代码不可读 @h3x0r 出于线程安全的原因,MFC 不允许您访问在另一个线程中创建的窗口(如编辑控件)。所以 PostMessage 技术是必要的。

以上是关于MFC C++ 在回调函数中编辑 Windows 控件的主要内容,如果未能解决你的问题,请参考以下文章

在 Windows C++ 应用程序中控制主线程

mfc 图片列表显示

如何在 Windows 8 上通过 C++ MFC 授予“所有人”写入权限?

c++ 中 MFC 函数的替代方案?

C++ MFC 改变菜单焦点

如何实现类的成员函数作为回调函数