CreateCompatibleBitmap schlägt fehl?!?!?!? Warum?
-
ok, dummer fehler
, er beendet das programm nicht mehr aber er blittet auch nicht, ich schätze das liegt an der Flip Funktion:bool CBuffer::Blt(CBitmap Bitmap, int iX, int iY) { bool bReturn; HBITMAP hOldBitmap = (HBITMAP) SelectObject(m_hdcBitmap, Bitmap.GetBitmap()); bReturn = BitBlt(m_hdcBack, iX, iY, m_rcScreenRect.right,m_rcScreenRect.bottom, m_hdcBitmap, 0, 0, SRCCOPY) != 0 ? true : false; //Muss das anders rum? SelectObject(m_hdcBitmap, hOldBitmap); return bReturn; }Aufruf:
if(Buffer.Flip() == false) break;danke im vorraus
-
erstens sehe ich hier nirgendwo eine flipfunktion.
zweitens: wieso mixt du MFC und WinAPI so grausam?
drittens: was sollBitmap.GetBitmap()? Hast du dir in der MSDN schonmal angeschaut, was GetBitmap für eine Funktion ist ?!
-
CBitmap ist eine eigene Klasse, GetBitmap() gibt ein Handle auf das Bitmap(HBITMAP) zurück. In CBuffer ist eine Funktion die heißt Flip und kopiert den Backbuffer auf den Frontbuffer.
-
aha
-
Wieso übergibst du bei BitBlt Screen-Koordinaten? Und wo rufst du den ganzen Code (bes. CBuffer::Blt) auf? Sind dort die ganzen Variablen gültig?
-
Och man heute bin ich durcheinander
... so nochmal:Funktion Flip:
bool CBuffer::Flip() { // Debugger sagt das hdcFront,hdcBack und hdcBitmap, Werte ungleich null haben und somit korrekt initalisiert wurden if(BitBlt(m_hdcFront, m_rcScreenRect.left, m_rcScreenRect.top,m_rcScreenRect.right, m_rcScreenRect.bottom, m_hdcBack, 0, 0, SRCCOPY) != 0) { return true; } else { // Hier sind hdcFront und hdcBack... auch noch korrekte Werte return false; } }Und hier Aufruf:
if(AnimateNextFrame(FRAME_RATE)) { //ClearScreen(g_Buffer.hdcBack,g_Buffer.scrnRect,BLACK_BRUSH); Box.CheckKeys(bKeys); Box.Blt(Buffer,&Font); if(iSpielZustand == SP_GAME) { if(!Map.CheckTeleports(&Player)) { Map.Blt(&Buffer,Cam); Player.Blt(Buffer,&Map,&Cam); Player.CheckKeys(bKeys); char strTemp[1024]; sprintf(strTemp,"%d,%d %d,%d",(Player.GetX()+8)/16,(Player.GetY()+27)/16,Player.GetX()+8,Player.GetY()+27); Buffer.TextBlt(strTemp,0,0,RGB(255,255,255)); //TextOut(g_Buffer.hdcBack,0,0,strTemp,strlen(strTemp)); } } else if(iSpielZustand == SP_INTRO) { Buffer.Blt(&Intro,200,150); if(bKeys[VK_SPACE]) iSpielZustand = SP_GAME; } if(Buffer.Flip() == false) break; }...*nochmal debug*...
hmm, warum sind die hBitmaps leer?
Ist dieser Code richtig?m_hBitmap = (HBITMAP)LoadImage(NULL,strFileName,IMAGE_BITMAP,0,0,LR_CREATEDIBSECTION);
-
sollte da nicht LR_LOADFROMFILE hin, siehe http://msdn.microsoft.com/library/default.asp?url=/library/en-us/winui/winui/windowsuserinterface/resources/introductiontoresources/resourcereference/resourcefunctions/loadimage.asp
-
Dankeschö, jetzt haben die Bitmaps wieder einen Wert,
doch das Flippen geht immer noch nicht 
-
und was sagt GetLastError() dazu?
-
GetLastError sagt bei mir 87, ich weiß leider nicht was für ein Fehler das ist. ich hab mal gehört das Getlasterror nur bei Win NT oder höher geht
-
MSDN sagt:
87 | The parameter is incorrect. | ERROR_INVALID_PARAMETERHäh???
-
Wo hast du GetLastError aufgerufen?
-
int i = 0; i = GetLastError(); DeInit();// Hier beträgt i = 87 UnregisterClass(WINDOWCLASS,hInstance); return msg.wParam ; }
-
MBytey schrieb:
int i = 0; i = GetLastError(); DeInit();// Hier beträgt i = 87 UnregisterClass(WINDOWCLASS,hInstance); return msg.wParam ; }und was steht drüber
