就是嵌入一个子窗口么?
资源里面插入一个对话框,属性Border选为None,Style选为Child,然后为之添加一个类,重载OnInitDialog(),自己设置大小和位置并开启定时器,处理WM_PAINT消息以自绘图片,处理WM_TIMER以更换图片。
最后在主对话框的类里面添加一个刚才定义的类的对象为成员变量m_dlg,并在主对话框的OnInitDialog()或OnCreate里面添加
m_dlg.Create(自定义对话框ID,this);
m_dlg.ShowWindow(SW_SHOW);就完成了

解决方案 »

  1.   

    我建立的是基于对话框的工程,其中一个按钮,对应OnWatch函数,点击按钮进入函数。我需要两次进入OnWatch,第一次进入时,创建一个非模式对话框,第二次进行销毁,请问我该怎么做,在哪里创建这个非模式对话框。
      

  2.   

    设对话框类是CxxxDlg;
    定义成员变量CxxxDlg *m_pDlg;构造函数初始化之为NULL。
    void OnWatch()
    {
    if (m_pDlg==NULL)
    {
    m_pDlg = new CxxxDlg;
    m_pDlg->Create(自定义对话框ID,this);
    m_pDlg->ShowWindow(SW_SHOW);
    }
    else
    {
    m_pDlg ->EndDialog(2);
    delete m_pDlg;
    m_pDlg = NULL;
    }
    }
      

  3.   

    还需要在非模式对话框类里重载DestroyWindow函数,在函数里调用delete this;吗??????
      

  4.   

    不用了,外面已经有delete m_pDlg;了你只要在主对话框的析构里面加上
    if (m_pDlg!=NULL)
    {
    m_pDlg ->EndDialog(2);
    delete m_pDlg;
    m_pDlg = NULL;
    }
    就好了
      

  5.   

    似乎子对话框自己关闭的,内存不好管理阿。结构改成这样可能好点:
    设对话框类是CxxxDlg;
    定义成员变量CxxxDlg m_dlg;
    void OnWatch()
    {
    if (!::IsWindow(m_dlg.GetSafeHwnd()))
    {
    m_dlg.Create(自定义对话框ID,this);
    m_dlg.ShowWindow(SW_SHOW);
    }
    else
    {
    m_dlg.EndDialog(2);
    }
    }说实话,上面的没试过,感觉应该可以,这样至少不用自己管理内存分配。你先试试吧,不行的话只能用另外一种麻烦的方法了
      

  6.   

    自己刚刚试了一下,!::IsWindow(m_dlg.GetSafeHwnd())还是不行,不过改成
    !m_dlg.IsWindowVisible()就可以了。
      

  7.   

    应该说是!(IsWindow(m_dlg.GetSafeHwnd())&&m_dlg.IsWindowVisible()),上面还有个条件忘了说了