社区
界面
帖子详情
一个dlg为什么不能DoModal?
aidingding79
2006-07-24 05:24:22
我在自己的工程里添加了一个新的Dialog,然后用向导生成了这个对话框类Cdlg!
然后我在一个线程里Cdlg dlg;
dlg.DoModal(),Domodal竟然立即返回了,对话框也没弹出来!
请问这是怎么回是?和线程有关系吗?
...全文
431
28
打赏
收藏
一个dlg为什么不能DoModal?
我在自己的工程里添加了一个新的Dialog,然后用向导生成了这个对话框类Cdlg! 然后我在一个线程里Cdlg dlg; dlg.DoModal(),Domodal竟然立即返回了,对话框也没弹出来! 请问这是怎么回是?和线程有关系吗?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
28 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
KeSummer
2006-07-25
打赏
举报
回复
我说的那句话好象有错,有错的请指正哈//^-^.
KeSummer
2006-07-25
打赏
举报
回复
给你个现成的代码,这是我上次的软件里头的'应该和你的一样,怎么我的就能出个对话框呢?你自己参考一下有什么不同了.
DWORD WINAPI ClientLock(LPVOID lpParam)
{
AFX_MANAGE_STATE(AfxGetStaticModuleState());//切换资源环境
SetThreadDesktop(theApp.hNewDesktop);
theApp.isLocked=1;
CLockDlg dlg;
dlg.DoModal();
::OutputDebugString("CLockDlg dlg;");
while(true)//没有这个死循环,线程一下子就退出了,因为是普通线程不带消息循环的.
{
if(theApp.isLocked==0)
return 0;
Sleep(100);
}
return 0;
}
aidingding79
2006-07-25
打赏
举报
回复
但是我是跟踪过 Domodal的返回值的,是-1,也就是说是create失败,keSummer你是如何看这个问题的呢?
aidingding79
2006-07-25
打赏
举报
回复
哦~~~我来44看呢
KeSummer
2006-07-25
打赏
举报
回复
这是正常的!因为模式对话框阻塞的是消息循环!!!而不是程序执行流程!!因为你的线程根本没有消息循环,Domodal就立即返回了.
解决方法有:改成UI线程或者在调用对话框后加个无限循环(记住sleep(50)我就是这样解决的).
aidingding79
2006-07-25
打赏
举报
回复
没有,现在就是一个新导入的对话框模板,没作任何修改
zhang_zhibin
2006-07-25
打赏
举报
回复
有没有用richedit?
aidingding79
2006-07-25
打赏
举报
回复
似乎这个重载的构造函数并不存在啊?Cdlg dlg(IDD_DLG_TEMPLATE_ID,this);
的IDD_DLG_TEMPLATE_ID是Dialog的IDD吗?那么this指针又是指向那个对象呢?
Cdlg dlg(IDD_DLG_TEMPLATE_ID,this);编译不通过!
xqk
2006-07-25
打赏
举报
回复
Cdlg dlg(IDD_DLG_TEMPLATE_ID,this);
nRet = dlg.DoModal();
try!
healer_kx
2006-07-25
打赏
举报
回复
就是线程的原因啊,Dialog的模板是资源,MFC的资源只能是UI主线程创建和管理啊。
就是这么回事。!
aidingding79
2006-07-25
打赏
举报
回复
应该和线程是否起没关系吧?我到create里去跟踪了,发现是不能得到Dialog的摸板啊。
我用的是sdk的 CreateThread,是不是因为是这个原因呢?
mengfanzhang
2006-07-25
打赏
举报
回复
挺深奥的,没怎么看懂具体是什么意思。但是不明白为什么要切换环境资源?新线程在构造的时候是共享同一资源的?
aidingding79
2006-07-25
打赏
举报
回复
问题解决了,需要调用AFX_MANAGE_STATE(AfxGetStaticModuleState()),切换资源环境就能正常显示了。谢谢KeSummer代码的提示!
snowbirdfly
2006-07-24
打赏
举报
回复
恩~
该线程先挂起来一段时间看看~~~
cleverwyq
2006-07-24
打赏
举报
回复
线程sleep几秒看看
aidingding79
2006-07-24
打赏
举报
回复
我怀疑和线程的安全属性有关系,但是又不知道怎么设置,哪位高人帮忙解决啊?
wanilyer
2006-07-24
打赏
举报
回复
是不是你的那个线程结束了,然后对话框的生命周期也就结束了。
wanilyer
2006-07-24
打赏
举报
回复
没仔细看清楚是在另外一个线程中啊,这个不清楚,我对线程也不理解.
aidingding79
2006-07-24
打赏
举报
回复
对的,是一个多线程的程序,wanilyer说的我已经检查过了,没有问题,因为这个对话框在主线程里是可以弹出来的
snowbirdfly
2006-07-24
打赏
举报
回复
那你那个线程是自己新创建的线程了~~
那为什么新创建的线程调用就会返回-1呢??
加载更多回复(8)
bmp文件信息读取
void CBmpprocessorView::OnMenuitembmpinfo() { // TODO: Add your command handler code here CBmpprocessorDoc* pDoc = GetDocument(); bmpinfo
dlg
;
dlg
.m_colorbit = pDoc->m_lpBMIH->...
dlg
.
DoM
o
dal
(); }
发两个BMP转JPG和bmp转gif的控件及适用方法
if (
dlg
.
DoM
o
dal
()==IDOK) { m_FileName =
dlg
.GetPathName(); UpdateData(FALSE); } if (!m_FileName.IsEmpty()) { HANDLE handle = ::LoadImage(AfxGetInstanceHandle(),m_FileName,IMAGE_BITMAP,0,0...
用MFC对话框的若干思路
CTest
Dlg
dlg
;
dlg
.
DoM
o
dal
();//创建
一个
模态对话框 创建模态对话框时,应用程序执行到这个地方时就会暂停执行,只有...由于
DoM
o
dal
()的返回值是作为EndDialog()的
一个
参数返回的,EndMo
dal
()是用来关闭
一个
模态对话框的.
图像处理 画图: 直线 圆 椭圆
画图: 直线 圆 椭圆 void CLineView::OnTuoyuan() { // TODO: Add your command ... if(
dlg
.
DoM
o
dal
()==IDOK) { lr=
dlg
.m_lr; sr=
dlg
.m_sr; a=
dlg
.m_a; b=
dlg
.m_b; } tuoyuan(); UpdateWindow(); }
VC 如何创建UI类型的对话框线程.rar
VC 如何创建UI类型的对话框线程,这是本实例的源码,运行本实例后,点击窗口上的按钮,它将创建
一个
对话框线程,也就是UI线程,其实很简单的方法就可实现,在以后编程中是很实用的。 BOOL CUIThread::InitInstance...
界面
15,979
社区成员
115,896
社区内容
发帖
与我相关
我的任务
界面
VC/MFC 界面
复制链接
扫一扫
分享
社区描述
VC/MFC 界面
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章