在一个MyDlg,有一个按钮,点击它弹出另外一个无模式对话框,再点击它就不在弹出这个无模式对话框,除非这个无模式对话框关闭了,我只让无模式对话框显示一次,高手指教,急啊

解决方案 »

  1.   

    按下按钮的消息处理函数:
    void CMyDlg::OnLButtonDown(UINT nFlags, CPoint point)
    {
       
       if(m_pDlg->GetSafeHwnd()==0)//无模式对话框是否创建
          m_pDlg->Create();//显示无模式对话框}
      

  2.   

    CMyDlg::OnButton1()
    {
      if(m_pModelessDlg == NULL)
    {
    CModelessDlg *m_pModelessDlg;
    m_pModelessDlg = new CModelessDlg(this);
    m_pModelessDlg->Create( CModelessDlg::IDD, GetDesktopWindow() );
    m_pModelessDlg->ShowWindow(SW_SHOW);
    }
    }CMyDlg::~CMyDlg()
    {
      if(m_pModelessDlg)
      {
    delete m_pModelessDlg;
       m_pModelessDlg = NULL;
      }
    }void CModelessDlg::PostNcDestroy()
    {
       delete this;
    }
      

  3.   

    lixiaosan(小三) 应是这样:
    在.H文件中
    CModelessDlg *m_pModelessDlg;
    CMyDlg::CMyDlg()
    {
    m_pModelessDlg = NULL;
    }CMyDlg::OnButton1()
    {
      if(m_pModelessDlg == NULL)
    {

    m_pModelessDlg = new CModelessDlg(this);
    m_pModelessDlg->Create( CModelessDlg::IDD, GetDesktopWindow() );
    m_pModelessDlg->ShowWindow(SW_SHOW);
    }
    }CMyDlg::~CMyDlg()
    {
      if(m_pModelessDlg)
      {
    delete m_pModelessDlg;
       m_pModelessDlg = NULL;
      }
    }void CModelessDlg::PostNcDestroy()
    {
       delete this;
    }
      

  4.   

    这样做还有一个问题:就是非模态对话框关闭以后如果想再创建这个非模态对话框,点击button后则不能创建。原因时在关闭非模态对话框时m_pModelessDlg没有置为空。也就是模态对话框CMyDlg没有得到m_pModelessDlg已经关闭的消息。
      

  5.   

    能不能设置一个BOOL型的状态变量m_xxx,初始化为FALSE,在OnButton中判断m_xxx,若为FALSE则跳出非摸态对话框,同时将m_xxx置为TRUE,在关闭非摸态对话框是将m_xxx置为FALSE。