1.怎么控制子对话框同一时间只能打开一个。比如我做的一个东西的一个子对话框,非模态的,我想用一个bool全局变量判断这个子对话框是不是正在运行,可是在重写的onclose()函数里改变bool变量的值不好使,总是把我的程序终止;请问该怎么做。
2.怎么能让控件的大小随对话框大小的改变而改变?请详细点,菜鸟。
谢谢回答!!!

解决方案 »

  1.   

    第二个是不是在窗口重绘时获得对话框大小,然后按比例缩放控件。是不是在OnDraw()中实现。偶也是菜鸟。
      

  2.   

    全局变量控制是可以的 是你程序写的有问题.
    简单点你可以使用一个全局CDialog对象.这样只会有一个了.动态缩放控件 实现较麻烦 需要手动计算坐标.在你窗体size()事件中处理即可.
      

  3.   

    1. 把你设置bool量的代码放到WM_DESTORY消息响应函数里面实现;2. 在对话框的OnSize消息里面,首先获取对话框当前大小,然后逐个计算每个控件在新窗口里面大小和位置,这个只能用代码实现,最后用MoveWindow函数重置每个控件的位置和大小
      

  4.   

    第一个问题我觉得可以写一个函数,假如父对话框是dialog,子对话框是CDialog dlg,可以这样写: 
    void CDialog::IsChildDlgExist()
    {
      if(dlg.IsWindowVisble())
      {
       return;
      }
      dlg.ShowWindow(SW_SHOW);
    }
    前提是子对话框一定要创建出来,这个可以设置BOOL形变量来判断。每次需要显示对话框时就先调用这个函数。
    第二个问题在对话框的OnSize()函数里面处理,响应WM_SIZE消息,先获取对话框的大小,再按照控件和对话框的相对比例进行缩放就可以了
      

  5.   

    第二个问题,控件大小用相对的,获得对话框的RECT然后控件MOVEWINDOW.
      

  6.   

    3楼的,放在OnDestroy()里也不行啊。是不是我做错了???我把部分代码贴出来,大家指教。
    void CMyDlg::OnButton1()  //主对话框的代码
    {
    // TODO: Add your control notification handler code here
    if(!g_exist1)   //g_exist1 全局控制变量
    {
    m_djczDlg.Create(IDD_DJCZ,this);  //子对话框
    g_exist1 = true;
    }
    else
    MessageBox("there is anothor instance is running !");
    }void CDJCZDlg::OnDestroy() //重写子对话框
    {
    CDialog::OnDestroy();

    // TODO: Add your message handler code here
    g_exist1 = false;  //改变值
    }
      

  7.   

    //判断Dlg是否已经打开
    bool CMyDlg::::IsOpen()
    {
    return m_hWnd ? true : false ;
    }
    //判断Dlg是否显示
    bool CMyDlg::::IsShow()
    {
    if(!IsOpen())
    return true;
    WINDOWPLACEMENT wpm;
    GetWindowPlacement(&wpm);
    if (wpm.showCmd == SW_SHOW)
    {
    return true;
    }
    else
    {
    return false;
    }
    }