读书人

其它线程如何在单文档窗体上放置的Lis

发布时间: 2013-03-26 09:54:34 作者: rapoo

其它线程怎么在单文档窗体上放置的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;
}

读书人网 >VC/MFC

热点推荐