mfc 怎么在其他线程里调用OnInitDialog()实现界面刷新

RT,用AfxBeginThread创建了一个监听线程,当条件触发时,需要调用OnInitDialog()刷新UI,但是OnInitDialog()是protected类... RT,用AfxBeginThread创建了一个监听线程,当条件触发时,需要调用OnInitDialog()刷新UI,但是OnInitDialog()是protected类型的,无法外部调用。所以该怎么在其他线程里刷新UI呢? 展开
 我来答
量子002
2013-01-23 · TA获得超过4212个赞
知道大有可为答主
回答量:4082
采纳率:66%
帮助的人:917万
展开全部
直接调用可以在创建线程时,将窗口对象的指针作为参数传递给监听线程函数,但这样做比较危险,直接调用时容易引起系统错误,特别是刷新界面中,如果使用了变量绑定的DDX函数。

比较安全的方式是:使用自定义消息从监听线程发送给UI线程,让UI线程接收到消息后,触发相应的自定义消息响应函数刷新界面。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
bhtzu
2013-01-23 · TA获得超过1.1万个赞
知道大有可为答主
回答量:8088
采纳率:85%
帮助的人:4230万
展开全部
你是要刷新数据还是刷新UI?
刷新UI的话,应该使用Invalidate()函数触发WM_PAINT进行重绘;
刷新数据的话,自定义一个public函数InitData(),OnInitDialog和线程都调用它就可以了。
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友3038d88
2013-01-23 · TA获得超过1097个赞
知道小有建树答主
回答量:1670
采纳率:0%
帮助的人:1168万
展开全部
假设你有 对话框的对象: m_dlg;
m_dlg.Invalidate();

m_dlg.PostMessage(WM_PAINT,0,0);

m_dlg.PostMessage(WM_SIZE,0,0);

这些应该都可以的
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式