程序已经实现线条的变色,线条可以变成绿色,蓝色。在实际的使用过程中,反复的变换蓝绿色,就出错了,变换颜色第一次就正常,第二次就报错了,是不是在变换颜色后要做什么工作,以免在变回去的时候报错呢?

解决方案 »

  1.   

    不要在OnTimer里画图
    不要在工作者线程里画图不要在OnPaint里死皮赖脸的用循环
      

  2.   


    void ChatDlg::OnPaint()
    {
    CPaintDC dc(this); CRect   rect;
    GetClientRect(rect);//窗口大小
    CDC dcBuffer;//后台缓存
    dcBuffer.CreateCompatibleDC(&dc);
    //dcBuffer.CreateCompatibleDC(dc);
    CBitmap dfbmp;//设置后台缓存大小
    dfbmp.CreateCompatibleBitmap(&dc,rect.right,rect.bottom);
    dcBuffer.SelectObject(&dfbmp);
    dcBuffer.FillRect(&rect, &CBrush(RGB(255,255,255)));
    dcBuffer.SetBkMode(TRANSPARENT);

    //m_imageBG.Draw(dcBuffer.m_hDC,rect);
    if (CHAT_SIZE_STATE_NORMAL == m_nChatSizeState)
    {
    CPen   cpen(PS_SOLID,1,RGB(128,179,210)); 
    dcBuffer.SelectObject(&cpen); 
    dcBuffer.MoveTo(0,69); 
    dcBuffer.LineTo(0,430);
    }
    else if (CHAT_SIZE_STATE_MAX == m_nChatSizeState)
    {

    CPen   cpen(PS_SOLID,1,RGB(128,179,210)); 
    dcBuffer.SelectObject(&cpen); 
    dcBuffer.MoveTo(0,69); 
    dcBuffer.LineTo(0,m_rtChatRect.bottom);
    }

    CFont   font;//字体设置
    font.CreateFont(15,0,0,0,FW_MEDIUM,FALSE,FALSE,0,ANSI_CHARSET,OUT_DEFAULT_PRECIS,
    CLIP_DEFAULT_PRECIS,   DEFAULT_QUALITY,DEFAULT_PITCH|FF_SWISS,"Arial");
    dcBuffer.SelectObject(&font); dcBuffer.SetTextColor(RGB(0,100,150));//字体颜色
    dcBuffer.TextOut(m_rtChatRect.right - 175,188,m_charlist.strJoin); dcBuffer.SetTextColor(RGB(0,0,0));//字体颜色
    dcBuffer.TextOut(m_rtChatRect.right - 175,75,m_charlist.strQueueName); dc.BitBlt(0,0,rect.right,rect.bottom,&dcBuffer,0,0,SRCCOPY);//将后台缓冲COPY到前台SRCPAINT 
    }
      

  3.   

    感觉是变量的问题,你可以将你的成员变量设置为全局的试试;或者给成static模式
      

  4.   

    http://download.csdn.net/source/3495311