本帖最后由 VisualEleven 于 2012-12-02 20:52:45 编辑

解决方案 »

  1.   

    你的CSetAlam类的OnInitDialog函数中调用OnBnClickedOK()函数?
      

  2.   

    不是在OnInitDialog里边调用的,OnBnClickedOK是“确定”按钮的命令响应函数,点击“确定”的时候调用它。
      

  3.   

    其实程序中是有问题的,我觉得你不能创建非模态对话框,因为创建非模态对话框就好比是创建了另一线程,并行运行,你还没按OK,OnSetalam()主对话框就执行完了.你试一下如下方案:
    CSetAlam psetAlam;
    if(psetAlam.DoModal==IDOK)
    {}psetAlam ->Create(IDD_SETALAM, NULL );     psetAlam ->ShowWindow(SW_SHOW);//创建的是非模态对话框 
      

  4.   

    不好意思,刚才出了点错
    其实程序中是有问题的,我觉得你不能创建非模态对话框,因为创建非模态对话框就好比是创建了另一线程,并行运行,你还没按OK,OnSetalam()主对话框就执行完了.你试一下如下方案:CSetAlam psetAlam;
    ALARM *palarm = NULL;
    if(psetAlam.DoModal==IDOK)
    {
       palarm = psetAlam ->GetAlarm();
    }
    然后再执行下面的代码,为了成功,最好高GetAlarm()为public类型.先试试吧,不行再说,自己的一点看法
      

  5.   

    两个对话框是一个进程还是两个进程?一个进程 可以互传指针或者消息
    两个进程 可以用WM_COPYDATA消息,管道,socket之类的方法通信
      

  6.   

    你的GetAlarm()是对话框的一个方法吧.
    CSetAlam psetAlam;
    ALARM *palarm = NULL;
    if(psetAlam.DoModal==IDOK)
    {
       palarm = psetAlam.GetAlarm();
    }
    大括号中用.来进行访问试一下,你把错误说清楚些.
      

  7.   

    不要用非模态对话框来创建你的CSetAlam!
    因为一旦创建为非模态形式的话,当然你的主程序函数void CAlarmClockDlg::OnSetalam() 不会等待你在CSetAlam对话框中设置的目标时间,就直接跑完了,原因就是他们不在同一个线程内。
    改为用“模态对话框domodle”来生成CSetAlam,当这个子对话框产生后,整个程序处于堵塞状态,只要你不点击“OnBnClickedOk()”,程序会已知等待。 
      

  8.   


    我想,既然是两个线程,我可不可以进行线程间通信。就是在
    void CSetAlam::OnBnClickedOk() {     //获取组合框中的文本    
     this->GetDlgItemTextW(IDC_HOUR, m_pAlarm->csHour);//获取时间    
     this->GetDlgItemTextW(IDC_MINITE, m_pAlarm->csMinite);//获取分钟       CDialogEx::OnOK(); 

    这个函数里边,向主线程发送一条自定义消息。然后在CAlarmClockDlg类里边写这个自定义消息函数,再在不这个函数里边创建一个子线程,最后在线程函数里边接受执行void CSetAlam::OnBnClickedOk() 的时候所设置的控件里边的值。
      

  9.   

    其实,你就想值传递而已,不行,设置外部变量,用extern来做
      

  10.   


    CSetAlam SetDlg;//全局变量。
    void CAlarmClockDlg::OnSetalam()
    {
    // TODO: 在此添加命令处理程序代码 if(SetDlg.DoModal() == IDOK)
    {
    m_hThread = ::CreateThread(NULL, 0, ThreadAlarm, this, 0, NULL);//创建一个线程
    }
    }
    为什么我设置断点调试的时候发现CSetAlam 的HwND是0x00000000呢?