读书人

为什么小弟我的窗口指针老是传入不了非

发布时间: 2012-01-16 23:36:51 作者: rapoo

为什么我的窗口指针老是传入不了非类函数里?------------------------------?
void CDataImprotDlg::OnRun()
{
// TODO: Add your control notification handler code
.........
.........
CWnd *cwd;
cwd = this-> GetActiveWindow ();
hRunThread = CreateThread (NULL, 0, (LPTHREAD_START_ROUTINE)&pRunThread, cwd, 0, &dwRunThreadID);
}

UINT pRunThread (LPVOID pp)
{
HWND hWnd;
CWnd* cnd = (CWnd*)pp;

hWnd = cnd-> GetSafeHwnd();
CListBox * aa;
aa= (CListBox *)GetDlgItem (hWnd, IDC_LISTINFO);
aa-> AddString ( "rrrrr "); //郁闷了.老是报错.
}

_________________________________________________________________________
到底怎么把当前窗口的指针传到pRunThread,也是就是CDataImprotDlg的指针.
或许传句柄更方面..
pRunThread 里面GetDlgItem 有两个参数.非要传入一个句柄.

[解决办法]
不要直接操作其它类里的变量,弄个函数
[解决办法]
hRunThread = CreateThread (NULL, 0, (LPTHREAD_START_ROUTINE)&pRunThread, this-> m_hWnd, 0, &dwRunThreadID);
[解决办法]
完全同意ouyh12345(五岭散人)

这是最保障的做法,安全不容易出问题
[解决办法]
hRunThread = CreateThread (NULL, 0, (LPTHREAD_START_ROUTINE)&pRunThread, cwd, 0, &dwRunThreadID);
不要传MFC对象指针给一线程函数,不安全,传句柄,改成:
hRunThread = CreateThread (NULL, 0, (LPTHREAD_START_ROUTINE)&pRunThread, GetSafeHwnd(), 0, &dwRunThreadID);

读书人网 >VC/MFC

热点推荐