dll中弹出窗口的问题,高手进。。。

poletiny 2010-11-21 04:52:53
我创建了一个能弹出窗口的mfc的dll,别的工程使用这个dll的时候可以调用这个dll中的对话框类来弹出相应的对话框,具体是这样做的:
我创建了一个MFC(dll)的工程,选择的是Regular Dll using shared MFC DLL这种类型,dll中弹出对话框我是这样实现的:
CBITAnalyseDlg anadlg;
if (! ::IsWindow(anadlg.m_hWnd) )
{

HINSTANCE hres = AfxGetResourceHandle();
AfxSetResourceHandle(theApp.m_hInstance);
bool isOK = anadlg.Create(CBITAnalyseDlg::IDD,CWnd::FromHandle((HWND)m_pWorkStation->GetWindowHandle()));
AfxSetResourceHandle(hres);
}
anadlg.CenterWindow();
anadlg.ShowWindow(SW_NORMAL);

我原来用过这种方法,很正常,使用这个dll时能正常弹出,但是这次使用就不正常了,弹出的对话框一闪而过连看清楚都没看清楚就没了。
这是怎么回事啊??是我忘记设置什么了么????高手指点
...全文
229 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
poletiny 2010-11-22
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 libinfei8848 的回复:]
来晚了,围观。。。
[/Quote]
谢谢围观 哈哈
libinfei8848 2010-11-21
  • 打赏
  • 举报
回复
来晚了,围观。。。
wltg2001 2010-11-21
  • 打赏
  • 举报
回复
我知道怎么改了,问题你找对了,是即时析构掉了,但是解决的方法不对,应该把CBITAnalyseDlg anadlg;设置成为使用它的类的类成员变量,这样调用就没问题了,我一开始把它声明在函数里了,是局部变量,立马就析构掉了

谢谢了
==========
类成员变量也是一种方法,我上面用的指针也是可以的,不过我写的时候写错了。
应该是这样写:
CBITAnalyseDlg *anadlg=new CBITAnalyseDlg;
poletiny 2010-11-21
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 wltg2001 的回复:]
CBITAnalyseDlg anadlg;
============
非模态对话框这样写肯定不行啊,局部变量一结束就析构了,对话框就没了。
改成这样:
CBITAnalyseDlg anadlg=new CBITAnalyseDlg;
后面作相应的改变就行了。
[/Quote]

我知道怎么改了,问题你找对了,是即时析构掉了,但是解决的方法不对,应该把CBITAnalyseDlg anadlg;设置成为使用它的类的类成员变量,这样调用就没问题了,我一开始把它声明在函数里了,是局部变量,立马就析构掉了

谢谢了
wltg2001 2010-11-21
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 poletiny 的回复:]
引用 1 楼 wltg2001 的回复:
CBITAnalyseDlg anadlg;
============
非模态对话框这样写肯定不行啊,局部变量一结束就析构了,对话框就没了。
改成这样:
CBITAnalyseDlg anadlg=new CBITAnalyseDlg;
后面作相应的改变就行了。


试了,这样不行,我那段代码是写在dll中的,这段代码后面还有其他代码使用……
[/Quote]
那你用模态对话框啊。
CBITAnalyseDlg anadlg;
anadlg.DoModal();不就行了。
poletiny 2010-11-21
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 wltg2001 的回复:]
CBITAnalyseDlg anadlg;
============
非模态对话框这样写肯定不行啊,局部变量一结束就析构了,对话框就没了。
改成这样:
CBITAnalyseDlg anadlg=new CBITAnalyseDlg;
后面作相应的改变就行了。
[/Quote]

试了,这样不行,我那段代码是写在dll中的,这段代码后面还有其他代码使用这个对话框传回来的变量,我想达到的目的是弹出对话框后后面的代码就不执行,等我按确定后再执行后面的代码
wltg2001 2010-11-21
  • 打赏
  • 举报
回复
CBITAnalyseDlg anadlg;
============
非模态对话框这样写肯定不行啊,局部变量一结束就析构了,对话框就没了。
改成这样:
CBITAnalyseDlg anadlg=new CBITAnalyseDlg;
后面作相应的改变就行了。

15,978

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧