我用不同颜色的画刷填充静态文本控件的颜色,来显示串口的开关状态,但是窗口发生重绘尤其
是这个控件部分重绘时,里面的图形就没了,我在对话框的onpaint()里加入相应的代码,效果也
很差,不知道有什么好方法没?谢谢!!

解决方案 »

  1.   

    onpaint()里加入相应的代码,效果也很差
    ===========
    怎么差?你在里面怎么写的?
      

  2.   

    窗口变化比较慢时还可以,快了,比如从最小化到正常,或者前面的窗口最小化都不行.代码是如下:void CMyDlg::OnPaint()
    {
    if(m_Com.GetPortOpen())
    SwitchLight(RGB(0,255,0),IDC_ComLight);
    else
    SwitchLight(RGB(255,0,0),IDC_ComLight);
    }
    void CMyDlg::SwitchLight(COLORREF color,UINT ID)
    {
    //COLORREF color
    CRect rc_tem;
    CBrush bsh(color);
    GetDlgItem(ID)->GetClientRect(&rc_tem);
    CDC *pdc=GetDlgItem(ID)->GetDC();
    pdc->SelectObject(&bsh);
    pdc->Ellipse(&rc_tem);
    GetDlgItem(ID)->ReleaseDC(pdc);
    }其中CMyDlg为对话框,m_hCom为cmscomm控件,谢谢!
      

  3.   

    你说的"效果很差",实际上是由于你的重绘算法计算时间长造成的.
    一般的控件颜色改变,是通过对"开关状态"参数的逻辑判断完成的,与窗口尺度变化所造成的重绘是不同的.你的程序在onpaint()里没有区分这些差别.