线程中不能创建模态对话框 20

在VC++6.0里中,自己做了一个对话框,并创建了对话框类CTestDlg;使用CreateThread(NULL,0,_ThreadProc,NULL,0,NULL)启... 在VC++ 6.0里中,自己做了一个对话框,并创建了对话框类CTestDlg;

使用CreateThread(NULL,0,_ThreadProc,NULL,0,NULL)启动了线程

线程函数如下:

WINAPI DWORD _ThreadProc(LPVOID pParam)
{
CTestDlg dlg;
dlg.DoModal();
return 0;
}

调试出现错误,发现dlg中的m_hWnd为Error:expression cannot be evaluted

也就是说dlg根本就没创建成功。

都有什么原因导致了创建失败呢?
刚才看了大家回答,说线程中不能创建模态对话框,那么为什么可以在线程中可以使用CFileDialog呢?
展开
 我来答
chenhaooo
2008-02-02 · TA获得超过439个赞
知道小有建树答主
回答量:487
采纳率:0%
帮助的人:273万
展开全部
一般CDialog构造时不带资源模板参数,是建立的非模态窗口;
模态窗口构造时,一般用这两个
explicit CDialog(
LPCTSTR lpszTemplateName,
CWnd* pParentWnd = NULL
);
explicit CDialog(
UINT nIDTemplate,
CWnd* pParentWnd = NULL
);

你的类应该调用父类的这两个构造函数
魔法洋红色
2008-02-09 · 超过15用户采纳过TA的回答
知道答主
回答量:37
采纳率:0%
帮助的人:0
展开全部
WindowsAPI的线程不能调用MFC的东西,要创建MFC的线程才能调用,函数是AfxBeginThread

原形是CWinThread* AfxBeginThread(
AFX_THREADPROC pfnThreadProc,
LPVOID pParam,
int nPriority = THREAD_PRIORITY_NORMAL,
UINT nStackSize = 0,
DWORD dwCreateFlags = 0,
LPSECURITY_ATTRIBUTES lpSecurityAttrs = NULL
);
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
帐号已注销
2008-02-02 · TA获得超过1682个赞
知道小有建树答主
回答量:2001
采纳率:0%
帮助的人:829万
展开全部
可以给某个窗口发消息(PostMessage)
,由某窗口来弹出对话框。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
mairycal
2008-02-02 · 超过45用户采纳过TA的回答
知道小有建树答主
回答量:104
采纳率:0%
帮助的人:0
展开全部
在线程里当然不能建立摸态对话框,除非你在线程里使用托管试一下也许可以.
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式