这是一个用mfc做的对话框程序 其中有一个按钮 点了之后开启一个线程
我把对话框句柄当参数传入然后通过这条代码得到这个对话框的指针CabcDlg*pDlg=(CabcDlg*)CabcDlg::FromHandle((HWND)param)...
我把对话框句柄当参数传入 然后通过这条代码得到这个对话框的指针CabcDlg *pDlg = (CabcDlg*)CabcDlg::FromHandle((HWND)param); 但是我发现用这个指针来用对话框的成员变量时 成员变量的值都不对 和之前赋的值都不一样了 怎么回事儿
展开
2个回答
展开全部
CabcDlg *pDlg = (CabcDlg*)AfxGetApp()->GetMainWnd();
追问
我不要窗口句柄 我想要的是指向对话框类的指针 从而可以用它的成员变量 你这个有半句返回的是句柄 左边却是个指针
追答
GetMainWnd返回的就是CWnd* 指针类型,可以直接强转为CabcDlg*指针类型,因为你这个对话框是程序的主窗口,所以可以这样获取。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
会不会是param的值不对啊
更多追问追答
追问
这是那个按钮的响应函数里的语句
HWND hwnd = GetSafeHwnd();
AfxBeginThread(RProc,hwnd,THREAD_PRIORITY_NORMAL);
这是线程函数:
UINT RProc(LPVOID param)
这是线程函数中对参数param的使用来得到对话框指针
CabcDlg *pDlg = (CabcDlg*)CabcDlg::FromHandle((HWND)param);
我在调试时发现hwnd指向的地址里面全是问号 怎么回事儿
追答
AfxBeginThread的第二个参数是指针吧,能直接传句柄么?
要不改成
AfxBeginThread(RProc,&hwnd,THREAD_PRIORITY_NORMAL);
CabcDlg *pDlg = (CabcDlg*)CabcDlg::FromHandle((HWND)(*param));
试试
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询