高人请进,解决问题,立即加分,以表感谢

xiaomingxx 2003-08-24 08:22:09
以CDialogBar为基类的对话框,我做了多个这样的对话框,分别用多个菜单消息函数打开,问题是:
1,点击一个菜单命令后,并没有按关闭对话框按钮,而是再次点击另外一个菜单命令,这时有两个对话框框被打开。
我想让第二次点击菜单命令后能使先前打开的对话框关闭,问应该怎么做?
2,点击一个菜单命令后,并没有按关闭对话框按钮,而是再次点击相同的菜单命令,我要使先前的对话框关闭,问应该怎样做。
我想让第二次点击菜单命令后能使先前打开的对话框关闭,问应该怎么做?

请各位高手回答的时候详细点。

...全文
37 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
ok1234567 2003-08-25
  • 打赏
  • 举报
回复
gzshd(郁闷) 的提法是可行的
你这样的问题,在UI程序开发中,是十分常见的,各人的解决方法不同
我建议:
在你的Frame类中声明一个指针
CMyDialogBar * myBar;
用new初始化它,或者初始化为NULL;
在打开的时候判断是否为(null),如果用new初始化了,其实也不需要判断了

在你的CMyDialogBar中,应该有一个名字为SetData(....)的方法,
在你show之前,设置对话框的数据,然后显示
重载WM_CLOSE,让它只是隐藏
GZCompiler 2003-08-25
  • 打赏
  • 举报
回复
在菜单消息中打开和关闭对话框:

void CMainFrame::OnMenuitem12345()
{
if(m_wndDlgBar.IsWindowVisible()) //m_wndDlgBar是要控制的CDialogBar对象
{
ShowControlBar(&m_wndDlgBar,0,0); //关闭DialogBar
}
else
{
ShowControlBar(&m_wndDlgBar,1,0); //打开DialogBar
}
}
fengqinggao 2003-08-25
  • 打赏
  • 举报
回复
想问一下,你的各对话框重新打开时,需要不需要保留上次打开时的数据?

我在你另外一个帖子里的方法应该是可行的,要不你把原码给我看看?——当然是不涉及公司秘密的情况下了,因为你的程序要新编一个测试还比较麻烦,呵呵。

在给你的消息中给了QQ号,我的信箱是fqg76@163.com,:)
Healer 2003-08-25
  • 打赏
  • 举报
回复
加入一个函数,
可以叫
DealPreDialog()
{

EndDialog(hWnd);
}
设置一个全局的 HWND 的变量, 用来储存上一个Dialog的hWnd.
明白吗?

在弹出一个Dialog的函数代码中加入DealPreDialog();
yanzai8848 2003-08-25
  • 打赏
  • 举报
回复
同意gzshd(郁闷) 的做法, 用全局变量记录.
不过在选择是用显示/隐藏还是创建/撤消的方式就又你自己决定.
我的提议:
如果对话框频繁创建撤消或者在初始化就全部创建了就用显示/隐藏, 操作也简单些.

我想你的做法应该是用显示/隐藏的方法.
如asett1(asett1) 所说:
SHowWindow(SW_SHOW),ShowWindow(SW_HIDE)
asett1 2003-08-25
  • 打赏
  • 举报
回复
老大,你用SHowWindow(SW_SHOW),ShowWindow(SW_HIDE)就可以了啊。怎么会关不掉呢。请仔细看我的代码
gzshd 2003-08-25
  • 打赏
  • 举报
回复
在CMainFrm.h中定义一个变量:int sign;
在CMainFrm中的OnCreate函数里加入:sign=0;//0表示没有对话框打开
在每个菜单项中加入:
if(sign!=0)
switch(sign){
case 1:m_bar1.DestroyWindow();break;
...
}
//再打开新的CDialogBar

用这种方法的前提是你的CDialogBar是以非模式对话框方式打开,如果是用模式对话框,就不能用DestroyWindow()了,而是EndDialog()
jennifergiant 2003-08-25
  • 打赏
  • 举报
回复
up
gzshd 2003-08-24
  • 打赏
  • 举报
回复
用一个全局变量来控制,当打开另一个对话框时,先判断有没对话框打开,如有,则用DestroyWindow()将上一个对话框关闭
nogreat 2003-08-24
  • 打赏
  • 举报
回复
用非模式对话框是不是更好些?
vldb 2003-08-24
  • 打赏
  • 举报
回复
用Modal对话框,这样在你的对话框关闭之前,无法切换到主程序窗口去进行菜单选择

15,979

社区成员

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

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