typedef struct
{
CWMSXM4TestDlg* dialog;
HWND hwnd;
}Mystruct;BOOL CWMSXM4TestDlg::OnInitDialog()
{
// TODO: 在此添加额外的初始化代码 Mystruct mystr;
mystr.dialog = this;
mystr.hwnd = this->m_hWnd;
CreateThread(NULL,0,VIPProc,&mystr,0,NULL); return TRUE; // 除非将焦点设置到控件,否则返回 TRUE
}DWORD WINAPI VIPProc(LPVOID paraMeter)
{
Mystruct* str = (Mystruct*)paraMeter;
CWMSXM4TestDlg* dialog = (CWMSXM4TestDlg*)str->dialog;
HWND hwnd = str->hwnd;
dialog->MessageBox(L"");}
VIPProc里面接受到的CWMSXM4TestDlg的m_hwnd已经是NULL了。dialog->MessageBox(L"");会报错。
{
CWMSXM4TestDlg* dialog;
HWND hwnd;
}Mystruct;BOOL CWMSXM4TestDlg::OnInitDialog()
{
// TODO: 在此添加额外的初始化代码 Mystruct mystr;
mystr.dialog = this;
mystr.hwnd = this->m_hWnd;
CreateThread(NULL,0,VIPProc,&mystr,0,NULL); return TRUE; // 除非将焦点设置到控件,否则返回 TRUE
}DWORD WINAPI VIPProc(LPVOID paraMeter)
{
Mystruct* str = (Mystruct*)paraMeter;
CWMSXM4TestDlg* dialog = (CWMSXM4TestDlg*)str->dialog;
HWND hwnd = str->hwnd;
dialog->MessageBox(L"");}
VIPProc里面接受到的CWMSXM4TestDlg的m_hwnd已经是NULL了。dialog->MessageBox(L"");会报错。
所以线程中是没效的另外你这里只需要将this指针传给线程就可以了
你结构体中的都是一个this指针就可以得到了
{
// TODO: 在此添加额外的初始化代码
CreateThread(NULL,0,VIPProc,&this,0,NULL); return TRUE; // 除非将焦点设置到控件,否则返回 TRUE
} DWORD WINAPI VIPProc(LPVOID paraMeter)
{
CWMSXM4TestDlg* dialog = (CWMSXM4TestDlg*)paraMeter;
HWND hwnd = dialog->hwnd;
dialog->MessageBox(L""); }
在线程中,还需要用到m_hWnd的,只是我没贴出来,
记得以前遇到过,用this->m_hWnd是不行的。
Mystruct *mystr=new Mystruct;
mystr->dialog = this;
mystr->hwnd = this->m_hWnd; CreateThread(NULL,0,VIPProc,(LPVOID)mystr ,0,NULL);
this->m_hWnd不行除非是你初始化对话框后立即关闭了
typedef struct
{
LPVOID dialog;
HWND hwnd;
}Mystruct;
在CWMSXM4TestDlg.h里加入Mystruct mystr;BOOL CWMSXM4TestDlg::OnInitDialog()
{
// TODO: 在此添加额外的初始化代码 mystr.dialog = this;
mystr.hwnd = this->m_hWnd;
CreateThread(NULL,0,VIPProc,&mystr,0,NULL); return TRUE; // 除非将焦点设置到控件,否则返回 TRUE
} DWORD WINAPI VIPProc(LPVOID paraMeter)
{
Mystruct* str = (Mystruct*)paraMeter;
CWMSXM4TestDlg* dialog = (CWMSXM4TestDlg*)str->dialog;
HWND hwnd = str->hwnd;
dialog->MessageBox(L""); }
我本来也想写在DIALOG里面的。但VS2005里面,好像线程函数没办法写在窗口函数里面啊,会报错。 这样线程函数就是个全局函数,没办法引用窗口成员。
Mystruct* str = (Mystruct*)paraMeter; 这句就不行了。