积极答复者
MFC开发.ocx控件的问题--希望高手进来看一看

问题
答案
-
一般来说ActiveX中不应弹出对话框。如果弹出对话框,应该在弹出之前通知容器(PreModalDialog,PostModalDialog),这样如果容器支持在ActiveX中弹出对话框,可以做相应的处理。
如果要弹出对话框,应该遵守模态对话框的规则,即后弹出的应该先被关闭。如果你的代码允许先弹出的在后弹出的之前关闭,那么你的窗口过程堆栈会被损坏,你的程序会有不可预料的行为。- 已建议为答案 Sheng Jiang 蒋晟Moderator 2009年2月3日 5:55
- 已标记为答案 Sheng Jiang 蒋晟Moderator 2009年5月9日 15:05
-
- 已建议为答案 Sheng Jiang 蒋晟Moderator 2009年5月9日 15:05
- 已标记为答案 Sheng Jiang 蒋晟Moderator 2009年5月9日 15:05
-
看看this指向哪里那篇文章就是说关闭次序不对的话栈会乱掉
MSMVP VC++- 已建议为答案 Sheng Jiang 蒋晟Moderator 2009年2月3日 6:01
- 已标记为答案 Sheng Jiang 蒋晟Moderator 2009年5月9日 15:05
全部回复
-
一般来说ActiveX中不应弹出对话框。如果弹出对话框,应该在弹出之前通知容器(PreModalDialog,PostModalDialog),这样如果容器支持在ActiveX中弹出对话框,可以做相应的处理。
如果要弹出对话框,应该遵守模态对话框的规则,即后弹出的应该先被关闭。如果你的代码允许先弹出的在后弹出的之前关闭,那么你的窗口过程堆栈会被损坏,你的程序会有不可预料的行为。- 已建议为答案 Sheng Jiang 蒋晟Moderator 2009年2月3日 5:55
- 已标记为答案 Sheng Jiang 蒋晟Moderator 2009年5月9日 15:05
-
您好,您可能没有理解我的意思,可能是我写的比较笼统。
我把代码粘过来会比较容易理解:
axtivex_1:
在带界面的控件1OnCreate函数里添加m_mainDlg.Create(IDD_MAINDLG1,this); m_mainDlg.ShowWindow(TRUE);
m_mainDlg对话框的样式是Style:Child、Border:None,其他保持默认。
在这个对话框中有一个按钮,按钮实现BN_CLICKED事件,按钮的功能是点击他探出一个对话框,具体实现CchildDlg m_child; m_child.DoModal();
activex_2:
带界面控件2的实现和控件1一样,也是在OnCreate函数里添加m_mainDlg2.Create(IDD_MAINDIG2,this); m_mainDlg2.ShowWindow(TRUE);
m_mainDlg2对话框的样式是Style:Child、Border:None,其他保持默认。
在这个对话框中也有一个按钮,按钮实现BN_CLICKED事件,按钮的功能也是点击他弹出一个对话框,具体实现CchildDlg2 m_child2; m_child2.DoModal(); 与前边一个CchildDlg不同的是,CchildDlg2对话框里使用了控件1。
这时我来写个测试程序来使用控件2 ,当操作一直弹出控件1的CchildDlg后,这是切换一下程序后再回来关闭CchildDlg,程序就甭掉了
具体的情况就是这样了,你能具体的帮我解释一下吗?是我程序的原因还是其他的原因?
-
“如果要弹出对话框,应该遵守模态对话框的规则,即后弹出的应该先被关闭。“ 你的这话很明显的, 用DoModal() 一层调用一层,最后弹出的当然先关闭阿,想关闭先打开的对话框也不可能阿。今天我试了一下你所说的PreModalDialog和PostModalDialog但还是不起作用啊,你如果有时间自己照着我的描述写两个activex控件,我询问了好多高手,大部分人说的mfco42d.dll库本身存在的问题,我在网上找了一下关于带界面控件的开发技术,但按照他们那样去做一个控件还是不行。你那有关于带界面控件的开发技术文档马?如果有的话,能不能贴出来,谢谢。
-
- 已建议为答案 Sheng Jiang 蒋晟Moderator 2009年5月9日 15:05
- 已标记为答案 Sheng Jiang 蒋晟Moderator 2009年5月9日 15:05
-
看看this指向哪里那篇文章就是说关闭次序不对的话栈会乱掉
MSMVP VC++- 已建议为答案 Sheng Jiang 蒋晟Moderator 2009年2月3日 6:01
- 已标记为答案 Sheng Jiang 蒋晟Moderator 2009年5月9日 15:05