Chessmaster3000
Junior Member | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору Есть: фрагмент программы который копирует содержимое экрана за текущим окном программы в буфер (что бы восстанавливать окно на WM_PAINT) ,а затем и в битмэп окна. Первый раз код исполняется как задумано-копирует прямоугольную область экрана "за собой" в окно. Когда этот же фрагмент исполняется в следующие разы, содержимое экрана копируется неправильно, оно не полностью заменяет старое изображение ,а отображается со сдвигом на примерно 50 пикселей по горизонтали и 50 по вертикали. Надеюсь что понятно всё объяснил . Как эту беду вылечить? ...регистрируется класс,объявляются перемнные и т.п. ======================== hdcScreen=CreateDC("DISPLAY",NULL,NULL,NULL); hdcCompatible=CreateCompatibleDC(hdcScreen); hbmScreen=CreateCompatibleBitmap(hdcScreen,GetDeviceCaps(hdcScreen,HORZRES),GetDeviceCaps(hdcScreen,VERTRES)); // если один раз копирует- то нормально работает. //если несколько то нет for(i=0;i<5;i++){ //спрячем окно и сфотографируем экран ShowWindow(hwnd,SW_HIDE); if(!hbmScreen) MessageBox(hwnd,"Error creating compatible bitmap","Error",MB_OK); if(!SelectObject(hdcCompatible,hbmScreen)) MessageBox(hwnd,"Error selecting an object","Error",MB_OK); //скопируем из экрана в запасной буфер if(!BitBlt(hdcCompatible,0,0,1200,1000,hdcScreen,0,0,SRCCOPY)) MessageBox(hwnd,"Error BitBlt 1","Error",MB_OK); //покажем окно ShowWindow(hwnd,SW_SHOW); //скопируем из запасного буфера в окно hdc=GetDC(hwnd); if(!BitBlt(hdc,0,0,1200,1000,hdcCompatible,0,0,SRCCOPY)) MessageBox(hwnd,"Error BitBlt 2","Error",MB_OK); } DeleteDC(hdcScreen); DeleteDC(hdcCompatible); ReleaseDC(hwnd,hdc); ========================== |