我做了一个SDI程序(单文档多视图),程序中我一共创建了2个视图。我在其中一个视图中创建了一个定时器,我的目的是实现图像的时时刷新,每隔2秒,程序查一下数据库,根据数据库中的数据来更新视图。但不知道为什么,程序一运行就死掉了,请高手替我解答,谢谢!!在线等!!!
我在OnTimer()中调用OnDraw()函数
void CEmulateView::OnDraw(CDC* pDC)
{
    CManageDoc* pDoc = GetDocument();
    ASSERT_VALID(pDoc);    DrawBkgndBim(pDC);//画背景    CBrush brush,*pOldbrush;
    pDC->SelectStockObject(NULL_PEN);    brush.CreateSolidBrush(RGB(255,247,47));
    pOldbrush = pDC->SelectObject(&brush);    CTb_Rect db_rect; //数据库类对象
    db_rect.Open();
    db_rect.MoveFirst();
    while(!db_rect.IsEOF())
    {
        if (db_rect.m_y_n == 1) //db_rect.m_y_n取值:0或者1
            pDC->SelectStockObject(NULL_BRUSH);
        pDC->Rectangle(db_rect.m_x_1,db_rect.m_y_1,db_rect.m_x_2,db_rect.m_y_2);
    }
    
    pDC->SelectObject(pOldbrush);    
}

解决方案 »

  1.   

    db_rect.Open();这个是比较慢的,建议不要放在OnDraw()里。
    而且你打开以后也没关。
      

  2.   

    while(!db_rect.IsEOF())
        {
            if (db_rect.m_y_n == 1) //db_rect.m_y_n取值:0或者1
                pDC->SelectStockObject(NULL_BRUSH);
            pDC->Rectangle(db_rect.m_x_1,db_rect.m_y_1,db_rect.m_x_2,db_rect.m_y_2);
        }
    好象是死循环吧!
    改一下:
    while(!db_rect.IsEOF())
        {
            if (db_rect.m_y_n == 1) //db_rect.m_y_n取值:0或者1
                pDC->SelectStockObject(NULL_BRUSH);
            pDC->Rectangle(db_rect.m_x_1,db_rect.m_y_1,db_rect.m_x_2,db_rect.m_y_2);
        db_rect.MoveNext();
        }