首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VC/MFC >

其它线程如何在单文档窗体上放置的ListBox上显示数据

2013-03-26 
其它线程怎么在单文档窗体上放置的ListBox上显示数据VC++2005单文档应用程序,基于FormView类,在窗体上放了

其它线程怎么在单文档窗体上放置的ListBox上显示数据
VC++2005单文档应用程序,基于FormView类,在窗体上放了ListBox控件。

怎么把在线程处理好的动态数据,动态的显示在窗体的ListBox控件中?
[解决办法]
其他线程,你把ListBox控件指针传到线程里,动态显示数据就处理一条插到ListBox就行了。
[解决办法]
传句柄比较好一点,可以用发消息的方法插入到ListBox里,MSDN上有这方面的资料。
比如发LB_ADDSTRING。
[解决办法]
可以这样,建一类,里面成员变量用静态变量,如
class a
{
static vector<int> b;
}

线程读取到数据后存入b,发消息给窗口,窗口收到消息后,刷新显示b的内容即可
[解决办法]
把主窗口句柄传给线程,通过主窗口获取FORMVIEW句柄,从而在获取LISTBOX句柄
然后把数据显示到LISTBOX中。
[解决办法]
//在CFormView类的某一函数中启动线程;
AfxBeginThread(ThreadProc, (LPVOID)GetSafeHwnd());
// 线程函数
UINT __cdecl ThreadProc(LPOID lParam)
{
 HWND hWnd = (HWND)lParam;
 ASSERT(hWnd);
.....
 CString strText(_T(""));
 // 计算得到要加到CListBox控件中的数据strText
 ....
 
 //得到数据以后,发送消息,主界面更新ListBox控件
 ::SendMessage(hWnd, UM_FILLLISTBOX, 0, (LPARAM)strText.GetBuffer(strText.GetLengt());
 strText.ReleaseBuffer();
 return 0;
}
#define UM_FILLLISTBOX WM_USER+11 // 自定义消息

afx_msg LRESULT OnFillListBox(WPARAM wParam, LPARAM lParam);

BEGNIN_MESSAGE_MAP(CXXXView, CFormView)
...
ON_MESSAGE(UM_FILLLISTBOX, &CXXXView::OnFillListBox)
END_MESSAGE_MAP()

// 自定义消息UM_FILLLISTBOX的消息响应函数
LRESULT CXXXView::OnFillListBox(WPARAM wParam, LPARAM lParam)
{
 LPTSTR szText = (LPTSTR)lParam;
 m_listbox.AddString(szText);
 return 0;
}

热点排行