两种画法,不同效果:
画法一:
//画矩形
CRect rect;
CBrush brush[16][16]; //16*16 brush数组
//作为接收显示数据的buffer
for (int i=0; i<16; i++)
{
for (int j=0; j<16; j++)
{
brush[i][j].CreateSolidBrush(RGB(i*16+j,i*16+j,i*16+j)); //将256色按顺序分给brush buffer
//实际应用将实际接收到的数据分配到参数中
}
}
for (int k=0; k<16; k++) // k代表行号
{
for(int l=0; l<16; l++) // l代表列号
{
CBrush* old = bDC.SelectObject(&brush[k][l]);
rect.SetRect(20*l,20*k,20*(l+1),20*(k+1));
bDC.Rectangle(rect);
bDC.SelectObject(old);
}
}
//***********************************************************************************************
//将后台画好的图像在显示器的目标控件中实际显示出来,以下操作完成真正在显示器上显示的操作
//***********************************************************************************************
pDC->BitBlt(0,0,900, 380, &bDC, 0, 0, SRCCOPY);
画出的效果:
画法二:
//画矩形
CRect rect;
CBrush brush[16][16]; //16*16 brush数组
//作为接收显示数据的buffer
for (int i=0; i<16; i++)
{
for (int j=0; j<16; j++)
{
brush[i][j].CreateSolidBrush(RGB(i*16+j,i*16+j,i*16+j)); //将256色按顺序分给brush buffer
//实际应用将实际接收到的数据分配到参数中
}
}
for (int k=0; k<16; k++) // k代表行号
{
for(int l=0; l<16; l++) // l代表列号
{
rect.SetRect(20*l,20*k,20*(l+1),20*(k+1));
bDC.Rectangle(rect);
bDC.FillRect(&rect,&brush[k][l]);
}
}
//***********************************************************************************************
//将后台画好的图像在显示器的目标控件中实际显示出来,以下操作完成真正在显示器上显示的操作
//***********************************************************************************************
pDC->BitBlt(0,0,900, 380, &bDC, 0, 0, SRCCOPY);
画出的效果:
区别就是:FillRect函数的使用。第二种画法里通过FillRect函数来调用画刷填充矩形(相邻矩形无黑线间隔),画法一中用selectobject函数来调用画刷画矩形(相邻矩形有黑线间隔),造成如此差异。