线程中创建CListCtrl控件 急!!!! 启动线程后,接受到一个对话框传过来的this指针。通过this指针引用这个对话框中的变量和函数,在这个对话框类中定义了一个CListCtrl控件。我想在线程中创建这个CListCtrl控件,但创建不成功。谁知道这种情况,如何在线程中创建CListCtrl控件,主要是获取不到CListCtrl::Create()的*pParentWnd.希望各位高手帮忙,谢谢 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 pParentWnd就是线程接受的this阿 LPVOID param为线程接收到的对话框参数(CDlg *)p = (Cdlg*)param;p->list.Create(style,CRect,p,0,1);执行后出错,请告之 察看msdnCListCtrl Create方法,下面有例子 UINT ThreadForStatusMonitor(LPVOID param){ ((CPinDlg*)param)->ls.Create( WS_VISIBLE | WS_BORDER|LVS_REPORT , CRect(0,0,400,200), (CPinDlg*)param, 1144);((CPinDlg*)param)->ls.ShowWindow(SW_SHOWNORMAL);//((CPinDlg*)param)->ls.RedrawItems(0,1);//((CPinDlg*)param)->ls.UpdateWindow();//AfxMessageBox("a");//((CPinDlg*)param)->ls.DestroyWindow(); return 0;}void CPinDlg::OnButton4() { // TODO: Add your control notification handler code here ::AfxBeginThread(ThreadForStatusMonitor,this,THREAD_PRIORITY_NORMAL,0,NULL);}ls为CPinDlg的CListCtrl成员变量搞笑的事,创建成功了,但是显示不出来如果再线程里加上这句AfxMessageBox("a");就可以显示出来,点击确定,再次消失期待搞人解答 任何窗口都必须从属于一个特定的线程,这样对它发的消息才能有个去处。窗口所属线程,由调用CreateWindowsEx的线程决定,哪个线程创建的窗口,哪个线程就拥有该窗口。在一个线程里创建子窗口,而主窗口从属于另一个线程,你想想这会是多大的混乱?据我所知,没有哪个函数可以修改窗口与线程的从属关系。不过,GetWindowThreadProcessId、AttachThreadInput和GetCurrentThreadID这几个函数或许能解决你的问题(还要注意,即使这样做,你的后台线程必须拥有自己的消息循环,否则这个CListCtrl无法接收消息)。我对AttachThreadInput这个函数也只有很少的使用经验,所以不是很有把握。不过,就我尝试的情况看,它似乎异常强大,连跨进程都可以。但因为文档太少,不了解它的局限和特性,而且它的功能也太奇怪,所以并不推荐你为了这么点困难而动用它,最好还是改为在主线程里创建所需的控件。 类成员函数运行完成后,类成员变量还在吗? Access的奇怪的问题 最近几天对WINDOWS压力检测的结果。 对话框A如何向对话框B发送消息,在线等...... 如何保留在控件里画出图象? 怎样获取windows登陆用户的密码啊? ocx在ie9下使用异常 windows一个目录下最多能放多少个子目录??? ::)请问如何利用vc打印出一个表格(就像word打印的那种表格,有行有列) 实现对其一个文本框输入内容后,然后单击按钮,将输入的内容写入另一个文本框中。 急:在不打开本地链接的网络文件和打印机的服务的计算机上也能共享文件 谁知道vc怎么使用xml连接sql数据库
(CDlg *)p = (Cdlg*)param;
p->list.Create(style,CRect,p,0,1);
执行后出错,请告之
CListCtrl Create方法,下面有例子
{
((CPinDlg*)param)->ls.Create( WS_VISIBLE | WS_BORDER|LVS_REPORT ,
CRect(0,0,400,200), (CPinDlg*)param, 1144);
((CPinDlg*)param)->ls.ShowWindow(SW_SHOWNORMAL);
//((CPinDlg*)param)->ls.RedrawItems(0,1);
//((CPinDlg*)param)->ls.UpdateWindow();
//AfxMessageBox("a");
//((CPinDlg*)param)->ls.DestroyWindow();
return 0;
}
void CPinDlg::OnButton4()
{
// TODO: Add your control notification handler code here
::AfxBeginThread(ThreadForStatusMonitor,this,THREAD_PRIORITY_NORMAL,0,NULL);
}
ls为CPinDlg的CListCtrl成员变量
搞笑的事,创建成功了,但是显示不出来
如果再线程里加上这句AfxMessageBox("a");
就可以显示出来,点击确定,再次消失
期待搞人解答
窗口所属线程,由调用CreateWindowsEx的线程决定,哪个线程创建的窗
口,哪个线程就拥有该窗口。
在一个线程里创建子窗口,而主窗口从属于另一个线程,你想想这会是多大
的混乱?据我所知,没有哪个函数可以修改窗口与线程的从属关系。不过,
GetWindowThreadProcessId、AttachThreadInput和
GetCurrentThreadID这几个函数或许能解决你的问题(还要注意,即使这
样做,你的后台线程必须拥有自己的消息循环,否则这个CListCtrl无法接
收消息)。我对AttachThreadInput这个函数也只有很少的使用经验,所以不是很有
把握。不过,就我尝试的情况看,它似乎异常强大,连跨进程都可以。但因
为文档太少,不了解它的局限和特性,而且它的功能也太奇怪,所以并不推
荐你为了这么点困难而动用它,最好还是改为在主线程里创建所需的控件。