JLI Spieleprogrammierung Foren-Übersicht JLI Spieleprogrammierung

 
 FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen 
 medals.php?sid=8d4178fd1ba843312644d1deaf80aa7aMedaillen   RegistrierenRegistrieren   ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin 

BITMAP mit GDI ausgeben!
Gehe zu Seite 1, 2  Weiter
 
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> Entwicklung
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
DerJJ
Junior JLI'ler



Anmeldedatum: 24.12.2002
Beiträge: 84

Medaillen: Keine

BeitragVerfasst am: 21.01.2003, 15:46    Titel: BITMAP mit GDI ausgeben! Antworten mit Zitat

Kann mir jemand sagen was ich alles an einem "normalen" Widows Fenster ändern muss(z.B. Das HelloWindows Programm) um eine bmp datei aus einer ressource als hintergrund des Fensters zu bekommen?
Bitte Code postings... ich hab schon gegoogelt und alle möglichen Foren durchsucht... mindestens 100 mal ausprobiert, aber des geht bei mir jedesmal wieder nicht! Bitte Bitte postet mal nen funzenden Code!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
AFE-GmdG
JLI MVP
JLI MVP


Alter: 45
Anmeldedatum: 19.07.2002
Beiträge: 1374
Wohnort: Irgendwo im Universum...
Medaillen: Keine

BeitragVerfasst am: 21.01.2003, 18:48    Titel: Antworten mit Zitat

Ich verweise ein weiteres mal auf meine Codebeispiele im Brett Projekte.
Dort habe ich das Programm Rotate geschrieben, das ein Bitmap mittels GDI anzeigt (und auch dreht)

AFE-GmdG
_________________
CPP:
float o=0.075,h=1.5,T,r,O,l,I;int _,L=80,s=3200;main(){for(;s%L||
(h-=o,T= -2),s;4 -(r=O*O)<(l=I*I)|++ _==L&&write(1,(--s%L?_<(L)?--_
%6:6:7)+\"World! \\n\",1)&&(O=I=l=_=r=0,T+=o /2))O=I*2*O+h,I=l+T-r;}
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
DerJJ
Junior JLI'ler



Anmeldedatum: 24.12.2002
Beiträge: 84

Medaillen: Keine

BeitragVerfasst am: 22.01.2003, 15:53    Titel: Och menno... Antworten mit Zitat

Also, ich hab da jetzt immernoch ein kleines Problem...
Also, ich hab mir dein dingens da runtergeladen,
und mal angeguckt...
so, dann hab ich bei deinem Code einiges auskommentiert damit dieses rotate fenster da nimmer is... Und des Ging, ich hatte also nur 1 ganz normales Bild, so wie ich es haben will!
dann habe ich alle Stellen die noch mit dem Bild zutun hatten in mein Programm kopiert, und siehe da Very Happy ,es geht net!! Crying or Very sad Crying or Very sad Crying or Very sad

Kann mir mal jemand sagen was wo reinmuss?
Also, da es nicht so ganz viel Code is, wär es cool wenn hier jemand mal den Code posten könnte mit einer kleinen beschreibung wo das hinmuss!
ich hab mein ganz normales WIndows Fensterund das bild hab ich als IDB_INSEL im windows bmp format mit 800 x 600 Pixeln als Ressource eingebunden, und in der ressource.h steht #define IDB_INSEL 1001

Büdde Büdde helf mir!!!!!!!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Hazel
JLI MVP
JLI MVP


Alter: 39
Anmeldedatum: 19.07.2002
Beiträge: 1761

Medaillen: Keine

BeitragVerfasst am: 22.01.2003, 18:30    Titel: Re: Och menno... Antworten mit Zitat

DerJJ hat Folgendes geschrieben:
dann habe ich alle Stellen die noch mit dem Bild zutun hatten in mein Programm kopiert, und siehe da :D ,es geht net!! :cry: :cry: :cry:


1. Den Code lesen
2. Den Code verstehen
3. Dann musst du wissen wie es geht.

Bei Cut&Paste lernst du NIX und der Code ist nicht mal auf deinem Mist gewachsen. Büffeln, büffeln, büffeln und selber probieren macht schlau. Es mag jetzt zwar unfreundlich klingen aber ich unterstütze diese Faulheit nicht.
_________________
*click* Dabuu!?
Twitter: http://twitter.com/Ollie_R
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
DerJJ
Junior JLI'ler



Anmeldedatum: 24.12.2002
Beiträge: 84

Medaillen: Keine

BeitragVerfasst am: 22.01.2003, 18:36    Titel: Antworten mit Zitat

Es tut mir Leid wenn ichs einfach nich checke!

Was mach ich falsch?
Code:

#include <windows.h>
#include "resource.h"

HWND hWnd = 0;
HDC hDC;
HINSTANCE hInstance;

[...]

case WM_PAINT:
                    PAINTSTRUCT ps;
                    // Handle des Device Context anfordern
                    hDC = BeginPaint(hWnd,&ps);   

HBITMAP hBitmap;
BITMAP bmp;
HDC hdcBmp;

hBitmap = LoadBitmap(hInstance,MAKEINTRESOURCE(IDB_INSEL));

GetObject(hBitmap, sizeof(BITMAP), (LPSTR)&bmp);
hdcBmp = CreateCompatibleDC(hdcBmp);
SelectObject(hdcBmp, hBitmap);
BitBlt(hdcBmp,150,120, bmp.bmWidth,bmp.bmHeight, hdcBmp, 0,0, SRCCOPY);
DeleteObject(hBitmap);

                    // mitteilen, dass die Zeichenoperationen abgeschlossen sind
                    EndPaint(hWnd,&ps);
                    return 0;
                break;
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
AFE-GmdG
JLI MVP
JLI MVP


Alter: 45
Anmeldedatum: 19.07.2002
Beiträge: 1374
Wohnort: Irgendwo im Universum...
Medaillen: Keine

BeitragVerfasst am: 23.01.2003, 10:59    Titel: Antworten mit Zitat

Soweit wie ich das jetzt überblicken kann Kopierst du mit der BitBlt-Zeile das Bitmap von hdcBmp nach hdcBmp. Fällt dir was auf???
auch 2 Zeilen vorher: hdcBmp = CreateCompatibleDC(hdcBmp); => Wie soll das Klappen???

Überprüfe doch mal Bitte, welche Variablen welche Aufgabe in deinem Projekt haben und was sie tatsächlich machen...

AFE-GmdG
_________________
CPP:
float o=0.075,h=1.5,T,r,O,l,I;int _,L=80,s=3200;main(){for(;s%L||
(h-=o,T= -2),s;4 -(r=O*O)<(l=I*I)|++ _==L&&write(1,(--s%L?_<(L)?--_
%6:6:7)+\"World! \\n\",1)&&(O=I=l=_=r=0,T+=o /2))O=I*2*O+h,I=l+T-r;}
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
DerJJ
Junior JLI'ler



Anmeldedatum: 24.12.2002
Beiträge: 84

Medaillen: Keine

BeitragVerfasst am: 23.01.2003, 14:45    Titel: Antworten mit Zitat

Also, ich hab jetzt den code nochmal verbessert und dann nochmal versucht:
Code:
LRESULT CALLBACK WndProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
     static HBITMAP hBitmap ;
     static BITMAP  bitmap ;
     static HDC     hdc, hdcMem;
     HINSTANCE      hInstance ;
     PAINTSTRUCT    ps ;

     switch (message)
     {
     case WM_CREATE:
          hInstance = ((LPCREATESTRUCT) lParam)->hInstance ;

          hBitmap = LoadBitmap (hInstance, "IDB_BMBID") ;

          GetObject (hBitmap, sizeof (BITMAP), &bitmap) ;
          return 0 ;

     case WM_SIZE:
          return 0 ;

     case WM_PAINT:
          hdc = BeginPaint (hwnd, &ps) ;

          hdcMem = CreateCompatibleDC (hdc) ;
          SelectObject (hdcMem, hBitmap) ;

          BitBlt (hdc, 100, 100, bitmap.bmWidth, bitmap.bmHeight, hdcMem, 0, 0, SRCCOPY) ;

            DeleteDC (hdcMem) ;
          EndPaint (hwnd, &ps) ;
          return 0 ;

     case WM_DESTROY:
          DeleteObject (hBitmap) ;
          PostQuitMessage (0) ;
          return 0 ;
     }
     return DefWindowProc (hwnd, message, wParam, lParam) ;
}


Und als Fehlermeldung bekomme ich das:
Code:
Linker-Vorgang läuft...
HelloWindows.obj : error LNK2001: Nichtaufgeloestes externes Symbol "long __stdcall MessageHandler(struct HWND__ *,unsigned int,unsigned int,long)" (?MessageHandler@@YGJPAUHWND__@@IIJ@Z)
Debug/HelloWindows.exe : fatal error LNK1120: 1 unaufgeloeste externe Verweise
Fehler beim Ausführen von link.exe.

HelloWindows.exe - 2 Fehler, 0 Warnung(en)


Zuletzt bearbeitet von DerJJ am 23.01.2003, 14:54, insgesamt 2-mal bearbeitet
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
DerJJ
Junior JLI'ler



Anmeldedatum: 24.12.2002
Beiträge: 84

Medaillen: Keine

BeitragVerfasst am: 23.01.2003, 14:52    Titel: Antworten mit Zitat

Auch mit der Verbesserung das ich das Bild als Resource hinzugefügt habe und aus der resource lade geht nicht:
der veränderte Code:
Code:

hBitmap = LoadBitmap (hInstance, MAKEINTRESOURCE(IDB_INSEL)) ;


Ich bekomme die gleiche Fehlermeldung!
nur wenn ich anstatt MAKEINTRESOURCE(IDB_INSEL) einfach nur "IDB_INSEL" schreibe bekomme ich eine andere Fehlermeldung, und zwar das int nicht in char konvertiert werden kann.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Hazel
JLI MVP
JLI MVP


Alter: 39
Anmeldedatum: 19.07.2002
Beiträge: 1761

Medaillen: Keine

BeitragVerfasst am: 24.01.2003, 14:50    Titel: Antworten mit Zitat

Hast du die Fehlermeldung überhaupt gelesen?? Die hat nix mit LoadBitmal zu tun. Du hast schlicht und einfach vergessen die Funktion MessageHandler zu implementieren. Lern erstmal programmieren bevor du mit sowas anfängst... so wird das nie was.
_________________
*click* Dabuu!?
Twitter: http://twitter.com/Ollie_R
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Ranma
JLI'ler



Anmeldedatum: 10.12.2002
Beiträge: 167
Wohnort: Cadolzburg
Medaillen: Keine

BeitragVerfasst am: 24.01.2003, 14:59    Titel: Antworten mit Zitat

wo er recht hat, hat er recht Cool
ein deutig nen messagehandler fehler
(hät sogar ich erkannt Rolling Eyes)
_________________
"Deutsche Sprache schwere Sprache"
sprach der C++er
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
DerJJ
Junior JLI'ler



Anmeldedatum: 24.12.2002
Beiträge: 84

Medaillen: Keine

BeitragVerfasst am: 24.01.2003, 15:50    Titel: ups Antworten mit Zitat

jaja, tut mir leid, ich habs voll verpeilt...
jetzt funzt es und ich hab schon wieder des nächste
diesesmal funzt der code und ich will halt so mach wie in c&c das man ein gebäude "bauen" kann... Also links im menu auf das haus und dann(bei mir gibts nur eine Stelle ^^ ) auf die Baufläche. das hab ich mit variablen&Zeigern gemacht, so wenn man dann da auf das haus klickt und dann auf die Fläche wird das Haus aber nicht gebaut... setzte ich die variable aber gleich so als ob das Haus schon gebaut wäre dann steht es auch da. Der Code geht, so wie er funktionieren soll, hab ich anhand von Messageboxen rausbekommen. wer sich den Code angucken will, hier:
http://mitglied.lycos.de/jaythehero/code.txt
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Hazel
JLI MVP
JLI MVP


Alter: 39
Anmeldedatum: 19.07.2002
Beiträge: 1761

Medaillen: Keine

BeitragVerfasst am: 24.01.2003, 19:44    Titel: Antworten mit Zitat

Wie wärs mit 'if(*pHaus)'?
_________________
*click* Dabuu!?
Twitter: http://twitter.com/Ollie_R
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
DerJJ
Junior JLI'ler



Anmeldedatum: 24.12.2002
Beiträge: 84

Medaillen: Keine

BeitragVerfasst am: 26.01.2003, 12:30    Titel: Antworten mit Zitat

Ne, daran liegt es nicht...
Ich muss nur Windows dazu kriegen meinem Programm die Nachricht WM_PAINT zu senden...
Und was macht man als erstes? Richtig, in der MSDN gucken...
Hab ich auch gemacht!
Dort gibt es SendMessage und PostMessage...
dann hab ich
Code:
SendMessage(hWnd,WM_PAINT,lParam,wParam);

in mein Programm da reingeschrieben, und es ging net...
Code:
SendMessage(HWND_BROADCAST,WM_PAINT,lParam,wParam);
ging auch nicht.
KAnn mir einer sagen wo ich das am besten schreiben soll, also an welcher stelle in einem code??? Ich hab es dort wo ich dann die Variable ändere wo dann eigentlich das Haus gebaut werden müsste!
Oder kann mir jemand der richtigen Code posten wo des dann funzt?


Kann mir einer sagen wie ich mit der GDI ne int Variable ausgeben kann?
Oder geht das irgendwie mit TextOut?
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Maar
Mini JLI'ler



Anmeldedatum: 02.01.2003
Beiträge: 3

Medaillen: Keine

BeitragVerfasst am: 26.01.2003, 13:01    Titel: Antworten mit Zitat

DerJJ hat Folgendes geschrieben:

Kann mir einer sagen wie ich mit der GDI ne int Variable ausgeben kann?
Oder geht das irgendwie mit TextOut?


Code:

...
#include <string>
#include <sstream>
using namespace std;
...
int nNumber(12345);
stringstream sTemp;
string sText;

sTemp << nNumber;
sTemp >> sText;
...
TextOut(hdc,x,y, sText.c_str(), sText.size());
...
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
DerJJ
Junior JLI'ler



Anmeldedatum: 24.12.2002
Beiträge: 84

Medaillen: Keine

BeitragVerfasst am: 26.01.2003, 16:19    Titel: Antworten mit Zitat

Cool danke!
Aber geht das auch einfacher als mit dem TextOut?
Gibts net sowas wie IntOut Laughing ???
Jetzt brauch ich nurnoch das mit der WM_PAINT nachricht!

Code:

case WM_RBUTTONDOWN:
SendMessage(hwnd,WM_PAINT,0,0);
break;


auch das geht nicht:
Code:

case WM_RBUTTONDOWN:
RedrawWindow(hWnd,NULL,NULL,RDW_INTERNALPAINT);
return 0;
break;


Aber des geht nicht... das 2 bild wird nur angezeigt wenn ich den Fensterrahmen irgendwie größer oder kleiner ziehe oder das programm minimiere und wieder maximiere oder wenn ich ein anderes Program drüber mache und dann meins wieder in den Vordergrund hohle...
ansonten nicht! Was soll ich machn?
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> Entwicklung Alle Zeiten sind GMT
Gehe zu Seite 1, 2  Weiter
Seite 1 von 2

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.


Powered by phpBB © 2001, 2005 phpBB Group
Deutsche Übersetzung von phpBB.de

Impressum