没有OutLook,你能否截个图给看看。
我觉得上图也不能很好的描述:我给你解释一下,看看你能看懂不 ?
我现在点击A,A会显示为顶层,但不能进行操作,isEnable = false。
outlook,点击A的时候,会把C显示出来,从顶层往下一次是C->B->A.
@sunlike: 你是用MFC的模板创建的项目吗?你在ChildFrame中创建 Dialog 的代码是如何实现的?
@Launcher:
给你贴一段代码:
CDlgSelUser Dlg;
if (Dlg.DoModal() == IDCANCEL) {
return;
}
没什么问题的哦。
@sunlike: 我是想知道你这段代码放在哪里的?
@Launcher:
放在一个按钮的事件里啊,亲
@sunlike: 你能不能具体的把代码贴出来,到底是出现在NewFrame或MainFrame,或是XXXView里?
@Launcher:
我是这样搞的:
这个按钮在一个panel(P)中,P是NewFrame的一个成员。刚才贴的按钮的事件是在Panel(p)中。
@sunlike: 根据你的叙述,我终于还原了你的场景,首先NewFrame不是MainFrame的子窗体,MainFrame不是MDI容器,所以才会出现你描述的问题,下面是一种可能的实现方式:
你应该在Dialog中捕获鼠标事件:SetCapture和 ReleaseCapture,然后通过鼠标事件来判断鼠标是否点击了你的MainFrame窗体(通过MainFrame的GetWindowRect来获取矩形框,注意,需要将鼠标坐标转换为桌面坐标),如果鼠标Click在MainFrame窗体内,则激活当前窗口。
你可以参照在MFC中实现下拉显示树形控件的ComboBox的方式来理解该方法。
@Launcher:
谢谢你的分析。
但是我还有一个问题
1:我写的这样的对话框,有很多,大概有20-30个左右。改动较大。
3:如果我调用了通用对话框,指出了Dialog,还是不能从根本上解决问题。
请问还有别的好方法吗 ?
@sunlike:
这很简单啊,b弹出的那个对话框具有topmost属性,就是这效果。
@hoodlum1980:
topmost恐怕不行吧
@sunlike: 你可以写一个从CDialog继承的子类 CDialogEx,然后把这个逻辑写在 CDialogEx 中,这样你的其它对话框就可以继承它。
其它方法有,但是,其它的好方法没有了。
@Launcher:
这个方法我试过了,可行。
不过对通用对话框无能为力,对messagebox也没有办法。对于两者还会出现我描述的问题。
@sunlike: 你需要自己编写一个MessageBox,把通用对话框嵌入在你的CDialogEx中,正如我们在制作特殊的ComboBox的时候,会把通用控件嵌入在我们的Popup Window中一样。
如果你不想做这么大的改动,或者你想一劳永逸的解决此问,你可以使用MDI框架,这样弹出的模态对话框会禁止你点击你的MainFrame和NewFrame。
@Launcher:
Thanks anyway.
谢谢你给我指出那么多意见。
我试试看。