MFC中多线程怎么调用窗口类成员函数

时间:2021-07-28 18:56:36
我在写一个资源管理器的MFC程序,想实现文件复制粘贴的多线程操作
在视图类的源文件里定义了几个全局的HANDLE hThread1=NULL;
然后在鼠标右键里响应HWND hWnd=GetSafeHwnd();
hThread1=AfxBeginThread(ExecutingFunction1,hWnd);
CloseHandle(hThread1);
可是在入口函数里一调用窗口类的函数就出错,请问怎么解决
UINT ExecutingFunction1(LPVOID pParam)
{  
// CResMaView * pDlg = (CResMaView *)pParam;
// pDlg->PasteFile();
// CResMaView *DlgPtr=(CResMaView*)AfxGetMainWnd();
// pDlg->PasteFile();
return 0;
}
上面我注掉的部分是我尝试过的方法

8 个解决方案

#1


传this指针进去,然后再DLG中调用你的菜单函数

#2


引用 1 楼 zhou1xp 的回复:
传this指针进去,然后再DLG中调用你的菜单函数

怎么传 请详细点说

#3


我后来试着把入口函数定义为窗口类的成员函数static UINT ExecutingFunction1(LPVOID pParam);
可是一调用其他函数还是出错
UINT CResMaView::ExecutingFunction1(LPVOID pParam)
{  
    CResMaView * pDlg = (CResMaView *)pParam;
    pDlg->PasteFile();
return 0;
}
这个怎么解决
和最开始的方法两种方法能解决一个就行

#4


引用 1 楼 zhou1xp 的回复:
传this指针进去,然后再DLG中调用你的菜单函数

MD,校长你个西瓜,说好的卖西瓜发财就带我们去玩的呀,你居然发财了就潜水了,我RI

#5


AfxBeginThread(ExecutingFunction1, hWnd);
传 hWnd 就要 按 hWnd 处理
CResMaView * pDlg = (CResMaView *) pParam;

这个hWnd 不是 CResMaView ,需要 FromHandle

#6


引用 5 楼 schlafenhamster 的回复:
AfxBeginThread(ExecutingFunction1, hWnd);
传 hWnd 就要 按 hWnd 处理
CResMaView * pDlg = (CResMaView *) pParam;

这个hWnd 不是 CResMaView ,需要 FromHandle
请具体点说怎么改 我是新手

#7


试试:
CResMaView * pDlg = (CResMaView *)CWnd::FromHandle((HWND)pParam);

#8


引用 7 楼 schlafenhamster 的回复:
试试:
CResMaView * pDlg = (CResMaView *)CWnd::FromHandle((HWND)pParam);

很感谢 解决了 我在AfxBeginThread(ExecutingFunction1,this);里直接传this指针就可以了

#1


传this指针进去,然后再DLG中调用你的菜单函数

#2


引用 1 楼 zhou1xp 的回复:
传this指针进去,然后再DLG中调用你的菜单函数

怎么传 请详细点说

#3


我后来试着把入口函数定义为窗口类的成员函数static UINT ExecutingFunction1(LPVOID pParam);
可是一调用其他函数还是出错
UINT CResMaView::ExecutingFunction1(LPVOID pParam)
{  
    CResMaView * pDlg = (CResMaView *)pParam;
    pDlg->PasteFile();
return 0;
}
这个怎么解决
和最开始的方法两种方法能解决一个就行

#4


引用 1 楼 zhou1xp 的回复:
传this指针进去,然后再DLG中调用你的菜单函数

MD,校长你个西瓜,说好的卖西瓜发财就带我们去玩的呀,你居然发财了就潜水了,我RI

#5


AfxBeginThread(ExecutingFunction1, hWnd);
传 hWnd 就要 按 hWnd 处理
CResMaView * pDlg = (CResMaView *) pParam;

这个hWnd 不是 CResMaView ,需要 FromHandle

#6


引用 5 楼 schlafenhamster 的回复:
AfxBeginThread(ExecutingFunction1, hWnd);
传 hWnd 就要 按 hWnd 处理
CResMaView * pDlg = (CResMaView *) pParam;

这个hWnd 不是 CResMaView ,需要 FromHandle
请具体点说怎么改 我是新手

#7


试试:
CResMaView * pDlg = (CResMaView *)CWnd::FromHandle((HWND)pParam);

#8


引用 7 楼 schlafenhamster 的回复:
试试:
CResMaView * pDlg = (CResMaView *)CWnd::FromHandle((HWND)pParam);

很感谢 解决了 我在AfxBeginThread(ExecutingFunction1,this);里直接传this指针就可以了