这是我在一个picture control上自绘图,本来想填充粉红色的效果,总是显示不了,其他什么颜色都不行,都是一致显示白色,各位高手帮忙一下
int cx,cy;
CPaintDC dc(this); 
CRect rc;
GetDlgItem(IDC_STATIC_P1)->GetClientRect(rc);
CWnd *pWnd = GetDlgItem(IDC_STATIC_P1);
CDC *pDC = pWnd->GetDC();
CBrush brush(RGB(255, 51, 153));
CBrush *pOldBrush = pDC->SelectObject(&brush);
//pDC->FillRect(rc,pOldBrush);
pWnd-> Invalidate(); 
    pWnd-> UpdateWindow(); 
cx=rc.Width()/52;
cy=rc.Height()/16;
for(int i=0;i<17;i++)
{
for(int j=0;j<55;j++)
{
//pDC->SelectStockObject(BLACK_BRUSH);
pDC->FillRect(CRect(CPoint(cx*j,cy*i),CSize(9,9)),pOldBrush);
}
}
pDC->SelectObject(pOldBrush);

解决方案 »

  1.   

    可以啊
    pDC->FillRect(CRect(CPoint(cx*j,cy*i),CSize(9,9)),pOldBrush);
    改为
    pDC->FillRect(CRect(CPoint(cx*j,cy*i),CSize(9,9)),&brush);
      

  2.   

    pDC->FillRect(CRect(CPoint(cx*j,cy*i),CSize(9,9)),pOldBrush);
    ====================
    你用的是旧画刷画图当然不行了。
      

  3.   

    如果只管画的话,用InvalidateRect即可你这个,最好用数组(或链表),元素为struct结构,
    struct
    {
      beginPos;
      endPos;
      color;
      其它信息
    }在OnPaint中按数组画图就行。
    修改颜色,只改动元素的color值,再InvalidateRect或Invalidate都可还建议使用双缓冲,才不闪
      

  4.   

    CBrush brush(RGB(255, 51, 153));
    你这句代码出问题了,画刷是不能这样创建的啊!
    这样写就没问题了:
    CBrush brush(pDC->CreateSolidBrush(RGB(255, 51, 153)));