Вот обработка WM_PAINT: Код (Text): case (WM_PAINT): {//сообщенение рисования в окне PAINTSTRUCT paint = {0}; BITMAP bm; HDC hdc=BeginPaint(hwnd,&paint); HDC tempHDC = CreateCompatibleDC(0); HDC bufHDC = CreateCompatibleDC(0); HBITMAP tempBitMap = CreateCompatibleBitmap(hdc,Width,Height); HBITMAP bufBitMap = CreateCompatibleBitmap(hdc,Width,Height); SelectObject(bufHDC,bufBitMap); SelectObject(tempHDC,ImageArea); GetObject(ImageArea,sizeof(bm),&bm); BitBlt(bufHDC,0,0,bm.bmWidth,bm.bmHeight,tempHDC,0,0,SRCCOPY); for (int i=0;i<10;i++)//рисование футболистов { // DrawTransparentBitmap(bufHDC,ImageP1,P1[i].GetX(),P1[i].GetY(),RGB(255,255,255)); // DrawTransparentBitmap(bufHDC,ImageP2,P2[i].GetX(),P2[i].GetY(),RGB(255,255,255)); }; DrawTransparentBitmap(bufHDC,ImageBall,Ball.GetX(),Ball.GetY(),RGB(255,255,255)); //риусем ворота левые MoveToEx(bufHDC,V1.Lx,V1.Ry,0); LineTo(bufHDC,V1.Rx,V1.Ry); LineTo(bufHDC,V1.Rx,V1.Ly); LineTo(bufHDC,V1.Lx,V1.Ly); //риусем ворота правые MoveToEx(bufHDC,V2.Rx,V2.Ry,0); LineTo(bufHDC,V2.Lx,V2.Ry); LineTo(bufHDC,V2.Lx,V2.Ly); LineTo(bufHDC,V2.Rx,V2.Ly); //рисуем всю картинку на экран StretchBlt(hdc,0,0,nWidth,nHeight,bufHDC,0,0,Width,Height,SRCCOPY); EndPaint(hwnd,&paint); DeleteDC(tempHDC); DeleteObject(tempBitMap); DeleteDC(bufHDC); DeleteObject(bufBitMap); return 0; break; }; Проблема в том что секунд через 10 ЦП загружен до 100%. WM_PAINT вызывается по таймеру каждые 300-1000мс . Таймер такой код делает: Код (Text): RECT rect; GetClientRect(hwnd,&rect); InvalidateRect(hwnd,&rect,true); Весь проект я подключил к файлу.
djmans это временные DC, они удаляются в конце обработки у человека. Вопрос - нафига селектить обратно?)