Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (WinAPI, Konsole) » Bild malen geht nicht

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 < [ 2 ]
000
20.06.2005, 19:43 Uhr
Lensflare



Hallo allerseits,

ich hab hier den folgenden codeschnipsel, der mir eine bilddatei von der festplatte auslesen und dann im fenster zeichnen soll:

C++:
  HBITMAP hBitmap;
  PAINTSTRUCT    ps;
  HDC hDC;

  //wenn WM_CREATE Nachricht, dann:
  hBitmap = (HBITMAP)LoadImage(NULL, "bild.bmp", IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE);

  //wenn WM_PAINT Nachricht, dann:
  hDC = BeginPaint(hWnd, &ps);

  DrawState(hDC, NULL, NULL, (LPARAM)hBitmap, 0, 10, 10, 0, 0, DST_BITMAP | DSS_NORMAL);

  EndPaint(hWnd, &ps);


ich hab auch versucht, das bild nach der WM_SIZE Nachricht zu zeichnen, geht aber trotzdem nicht

kann mir da bitte jemand helfen?
--
Wenn das Gehirn so einfach wäre, dass wir es verstehen könnten, wären wir so einfach, dass wir es nicht verstehen könnten.
(Emerson Pugh Trost)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
20.06.2005, 20:15 Uhr
Guybrush Threepwood
Gefürchteter Pirat
(Operator)



Zitat von msdn:
DST_BITMAP The image is a bitmap. The low-order word of the lData parameter is the bitmap handle.

Versuchs mal so:

C++:
DrawState(hDC, NULL, NULL,MAKELPARAM(hBitmap,0),....



Außerdem kann es nie schaden mal den Rückgabewert einer Funktion zu überprüfen wenn etwas nicht klappt
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
20.06.2005, 20:35 Uhr
Lensflare



mit MAKELPARAM(hBitmap,0) geht es auch nicht.

bei msdn steht, dass die funktion DrawState einen bool zurückgibt, aber ich kann den rückgabewert trotzdem nicht überprüfen. Und mit der info, ob die funktion erfolgreich war oder nicht, kann ich auch nicht viel anfangen.
--
Wenn das Gehirn so einfach wäre, dass wir es verstehen könnten, wären wir so einfach, dass wir es nicht verstehen könnten.
(Emerson Pugh Trost)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
20.06.2005, 20:39 Uhr
Guybrush Threepwood
Gefürchteter Pirat
(Operator)


In der MSDN steht da aber auch das du mit GetLastError() eine genaue Fehlernummer bekommst (wie bei eigentlich jeder WinAPi Funktion).
Was liefert DrawState den nun zurück? true oder false?

Wann führst du diesen Codeteil denn aus?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
20.06.2005, 20:58 Uhr
Lensflare



hmm, keine ahnung was los war, aber ich konnte den rückgabewert jetzt doch prüfen.
die funktion gibt false zurück. also fehlgeschlagen oder?

Zitat:

Wann führst du diesen Codeteil denn aus?


wenn die WM_PAINT Nachricht kommt. An der stelle stimmt der code. Ich hab den rückgabewert nämlich nach der WM_PAINT Nachricht überprüft:

C++:
//...
  case WM_PAINT:
  {
    hDC = BeginPaint(hWnd, &ps);

    if(DrawState(hDC, NULL, NULL, (LPARAM)hBitmap, 0, 10-9, 156-9, 0, 0, DST_BITMAP | DSS_NORMAL) == false)
    {
      MessageBox(NULL, "false", "Info", MB_ICONERROR | MB_OK | MB_DEFBUTTON1);
    }

  EndPaint(hWnd, &ps);
  return 0;
  }
//...



EDIT:
das selbe ergebnis auch, wenn ich MAKELPARAM(hBitmap,0) statt (LPARAM)hBitmap schreibe
--
Wenn das Gehirn so einfach wäre, dass wir es verstehen könnten, wären wir so einfach, dass wir es nicht verstehen könnten.
(Emerson Pugh Trost)

Dieser Post wurde am 20.06.2005 um 21:01 Uhr von Lensflare editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
20.06.2005, 21:17 Uhr
Guybrush Threepwood
Gefürchteter Pirat
(Operator)


Und was gibt dir GetLastError zurück wenn DrawState fehlschlägt?

WM_PAINT ist richtig. Hast du mal geguckt ob hBitmap ein gültiges Handle ist oder ob LoadImage fehlgeschlagen ist?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
20.06.2005, 22:09 Uhr
Lensflare




Zitat:
Hast du mal geguckt ob hBitmap ein gültiges Handle ist oder ob LoadImage fehlgeschlagen ist?

jup, LoadImage gibt nicht NULL zurück, also erfolgreich. Hab zur sicherheit einen falschen dateinamen eingegeben und sie hat dann wie erwartet NULL zurückgegeben.


Zitat:
Und was gibt dir GetLastError zurück wenn DrawState fehlschlägt?

aus der beschreibung für GetLastError von msdn werd ich nicht schlau. Ich weiss weder welchen variablentyp die funktion zurückgibt, noch was man damit anfangen kann
--
Wenn das Gehirn so einfach wäre, dass wir es verstehen könnten, wären wir so einfach, dass wir es nicht verstehen könnten.
(Emerson Pugh Trost)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
21.06.2005, 05:22 Uhr
~xilc
Gast


warum überhaupt

C++:
DrawState(...


und nicht ein

C++:
BitBlt(...


?
Steigert die Männlichkeit des Codes und funktioniert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
008
21.06.2005, 09:40 Uhr
Guybrush Threepwood
Gefürchteter Pirat
(Operator)


@xilc lol was fürn schwachsinn


@Lensflare
GetLastError() rufst du einfach auf wenn eine WinApi Funktion fehlgeschlagen ist. Es wird ein DWORD zurückgegeben. Diesen kannst du wie einen Integer behandeln.
Es gibt die Funktion FormatMessage mitder du dir zum Fehlercode eine entsprechende Meldung holen kannst und beim Visual Studio ist ein Programm dabei wo du einfach die Nummer eingeben kannst und er spuckt die Meldung aus.

Guck einfach mal was GetLastError() für einen Fehlercode nach DrawState zurückgibt und poste den hier.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
009
21.06.2005, 19:32 Uhr
Lensflare



GetLastError() hat 5 zurückgegeben.

Wie man FormatMessage benutzt, weiss ich leider nicht.
--
Wenn das Gehirn so einfach wäre, dass wir es verstehen könnten, wären wir so einfach, dass wir es nicht verstehen könnten.
(Emerson Pugh Trost)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 < [ 2 ]     [ C / C++ (WinAPI, Konsole) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: