mfc 怎么在其他线程里调用OnInitDialog()实现界面刷新
RT,用AfxBeginThread创建了一个监听线程,当条件触发时,需要调用OnInitDialog()刷新UI,但是OnInitDialog()是protected类...
RT,用AfxBeginThread创建了一个监听线程,当条件触发时,需要调用OnInitDialog()刷新UI,但是OnInitDialog()是protected类型的,无法外部调用。所以该怎么在其他线程里刷新UI呢?
展开
展开全部
直接调用可以在创建线程时,将窗口对象的指针作为参数传递给监听线程函数,但这样做比较危险,直接调用时容易引起系统错误,特别是刷新界面中,如果使用了变量绑定的DDX函数。
比较安全的方式是:使用自定义消息从监听线程发送给UI线程,让UI线程接收到消息后,触发相应的自定义消息响应函数刷新界面。
比较安全的方式是:使用自定义消息从监听线程发送给UI线程,让UI线程接收到消息后,触发相应的自定义消息响应函数刷新界面。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
你是要刷新数据还是刷新UI?
刷新UI的话,应该使用Invalidate()函数触发WM_PAINT进行重绘;
刷新数据的话,自定义一个public函数InitData(),OnInitDialog和线程都调用它就可以了。
刷新UI的话,应该使用Invalidate()函数触发WM_PAINT进行重绘;
刷新数据的话,自定义一个public函数InitData(),OnInitDialog和线程都调用它就可以了。
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
假设你有 对话框的对象: m_dlg;
m_dlg.Invalidate();
m_dlg.PostMessage(WM_PAINT,0,0);
m_dlg.PostMessage(WM_SIZE,0,0);
这些应该都可以的
m_dlg.Invalidate();
m_dlg.PostMessage(WM_PAINT,0,0);
m_dlg.PostMessage(WM_SIZE,0,0);
这些应该都可以的
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询