MFC基于对话框的应用程序,在主对话框声明用SetTimer一个定时器,在定时器响应函数中绘图。在主对话框上添加一个按钮,点击按钮,弹出一个非模态对话框,非模态对话上有下拉列表控件。
        以上为程序基本功能,程序编译通过,开始运行,一切OK.。点击按钮,弹出非模态对话框。此时也一切OK,拖动非模态对话框或者点击下拉列表控件,主对话框里定时器中绘图工作就停止了,时间一长,程序直接卡死了都。
      为解决这个问题,我把定时器去掉,在主程序中开一个线程来进行绘图,成功解决这个问题。
但是,实际应用中必须用定时器(SetTimer)来进行绘图,所以只能在非模态对话框上想办法了,实在是没招了,跪求论坛大牛指导。

解决方案 »

  1.   

    我之前也遇到这样的问题。
    后面找到解决方法:在要需要调出对话框时先把定时器关掉 KillTimer,然后在子对话框的初始化函数里面,再获取主对话框的指针,并将那个定时器开启。
      

  2.   

    绘图操作应该全部写在OnPaint函数里
    定时器只是修改参数调用Invalid来激活重绘
      

  3.   

    不行啊 我在点击按钮的代码中首先KillTimer(1)  然后再写调出非模态对话框的代码 然后在模态对话框的初始化函数OnInitDialog中重新启动定时器 ::SetTimer(m_pDlg-〉m_hWnd,1,30,NULL)   自然不行啊  你看我这有哪里不对吗?
      

  4.   

    试试
    使用多媒体定时器 timeSetEvent() 函数
      

  5.   

    试过的 目前状况是只必须用SetTimer 只能在非模态对话框这边想办法
      

  6.   

    1   其实,你的线程都实现了,线程时可以替换定时器的。
    2   试试  CreateWaitableTimer
      

  7.   

    真理,不放在OnPaint里的绘图都是瞎球画
      

  8.   

    放OnPaint里试了 依然不行
      

  9.   

    绘图代码放在OnPaint里 定时器中调用重绘