已经用了双缓冲
用一下代码刷新界面时还是会有闪烁,问一下各位高手这么解决
void MyUpdateWindow()
{
assert(ghdc);
int i,j;
HBITMAP bmp;
HDC memDC=CreateCompatibleDC(ghdc);
HPEN hPen;
HBRUSH hBrush;
GetWindowRect(gHwnd,&rect);
bmp=CreateCompatibleBitmap(ghdc,rect.right-rect.left,rect.bottom-rect.top);
SelectObject(memDC,bmp);
BitBlt(memDC,0,0,rect.right-rect.left,rect.bottom-rect.top,ghdc,0,0,SRCCOPY);
switch(mainColor)
{
case R:
m_rgb->setR(mainPos-10);
for(i=10;i<=265;i++)
for(j=10;j<=265;j++)
{
SetPixel(memDC,i,j,RGB(m_rgb->getR(),i-10,j-10));
}
for(i=10;i<=265;i++)
{
//point.y=i;
hPen=CreatePen(PS_SOLID,1,RGB(i-10,m_rgb->getG(),m_rgb->getB()));
SelectObject(memDC,hPen);
MoveToEx(memDC,295,i,NULL);
LineTo(memDC,315,i);
DeleteObject(hPen);
}
break;
case G:
m_rgb->setG(mainPos-10);
for(i=10;i<=265;i++)
for(j=10;j<=265;j++)
{
SetPixel(memDC,i,j,RGB(i-10,m_rgb->getG(),j-10));
}
for(i=10;i<=265;i++)
{
//point.y=i;
hPen=CreatePen(PS_SOLID,1,RGB(m_rgb->getR(),i-10,m_rgb->getB()));
SelectObject(memDC,hPen);
MoveToEx(memDC,295,i,NULL);
LineTo(memDC,315,i);
DeleteObject(hPen);
}
break;
case B:
m_rgb->setB(mainPos-10);
for(i=10;i<=265;i++)
for(j=10;j<=265;j++)
{
SetPixel(memDC,i,j,RGB(i-10,j-10,m_rgb->getB()));
}
for(i=10;i<=265;i++)
{
//point.y=i;
hPen=CreatePen(PS_SOLID,1,RGB(m_rgb->getR(),m_rgb->getG(),i-10));
SelectObject(memDC,hPen);
MoveToEx(memDC,295,i,NULL);
LineTo(memDC,315,i);
DeleteObject(hPen);
}
break;
}
POINT tri1[]={{285,mainPos-5},{285,mainPos+5},{295,mainPos}};
POINT tri2[]={{325,mainPos-5},{325,mainPos+5},{315,mainPos}};
hPen=CreatePen(PS_SOLID,1,RGB(0,0,0));
hBrush=CreateSolidBrush(RGB(100,250,255));
SelectObject(memDC,hPen);
SelectObject(memDC,hBrush);
Polygon(memDC,tri1,3);
Polygon(memDC,tri2,3);
BitBlt(ghdc,0,0,rect.right-rect.left,rect.bottom-rect.top,memDC,0,0,SRCCOPY);
DeleteObject(bmp);
DeleteObject(hPen);
DeleteObject(hBrush);
DeleteDC(memDC);
}