|
JLI Spieleprogrammierung
|
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
DerJJ Junior JLI'ler
Anmeldedatum: 24.12.2002 Beiträge: 84
Medaillen: Keine
|
Verfasst am: 21.01.2003, 15:46 Titel: BITMAP mit GDI ausgeben! |
|
|
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 |
|
|
AFE-GmdG JLI MVP
Alter: 45 Anmeldedatum: 19.07.2002 Beiträge: 1374 Wohnort: Irgendwo im Universum... Medaillen: Keine
|
Verfasst am: 21.01.2003, 18:48 Titel: |
|
|
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 |
|
|
DerJJ Junior JLI'ler
Anmeldedatum: 24.12.2002 Beiträge: 84
Medaillen: Keine
|
Verfasst am: 22.01.2003, 15:53 Titel: Och menno... |
|
|
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 ,es geht net!!
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 |
|
|
Hazel JLI MVP
Alter: 39 Anmeldedatum: 19.07.2002 Beiträge: 1761
Medaillen: Keine
|
Verfasst am: 22.01.2003, 18:30 Titel: Re: Och menno... |
|
|
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 |
|
|
DerJJ Junior JLI'ler
Anmeldedatum: 24.12.2002 Beiträge: 84
Medaillen: Keine
|
Verfasst am: 22.01.2003, 18:36 Titel: |
|
|
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 |
|
|
AFE-GmdG JLI MVP
Alter: 45 Anmeldedatum: 19.07.2002 Beiträge: 1374 Wohnort: Irgendwo im Universum... Medaillen: Keine
|
Verfasst am: 23.01.2003, 10:59 Titel: |
|
|
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 |
|
|
DerJJ Junior JLI'ler
Anmeldedatum: 24.12.2002 Beiträge: 84
Medaillen: Keine
|
Verfasst am: 23.01.2003, 14:45 Titel: |
|
|
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 |
|
|
DerJJ Junior JLI'ler
Anmeldedatum: 24.12.2002 Beiträge: 84
Medaillen: Keine
|
Verfasst am: 23.01.2003, 14:52 Titel: |
|
|
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 |
|
|
Hazel JLI MVP
Alter: 39 Anmeldedatum: 19.07.2002 Beiträge: 1761
Medaillen: Keine
|
Verfasst am: 24.01.2003, 14:50 Titel: |
|
|
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 |
|
|
Ranma JLI'ler
Anmeldedatum: 10.12.2002 Beiträge: 167 Wohnort: Cadolzburg Medaillen: Keine
|
Verfasst am: 24.01.2003, 14:59 Titel: |
|
|
wo er recht hat, hat er recht
ein deutig nen messagehandler fehler
(hät sogar ich erkannt ) _________________ "Deutsche Sprache schwere Sprache"
sprach der C++er |
|
Nach oben |
|
|
DerJJ Junior JLI'ler
Anmeldedatum: 24.12.2002 Beiträge: 84
Medaillen: Keine
|
Verfasst am: 24.01.2003, 15:50 Titel: ups |
|
|
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 |
|
|
Hazel JLI MVP
Alter: 39 Anmeldedatum: 19.07.2002 Beiträge: 1761
Medaillen: Keine
|
Verfasst am: 24.01.2003, 19:44 Titel: |
|
|
Wie wärs mit 'if(*pHaus)'? _________________ *click* Dabuu!?
Twitter: http://twitter.com/Ollie_R
|
|
Nach oben |
|
|
DerJJ Junior JLI'ler
Anmeldedatum: 24.12.2002 Beiträge: 84
Medaillen: Keine
|
Verfasst am: 26.01.2003, 12:30 Titel: |
|
|
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 |
|
|
Maar Mini JLI'ler
Anmeldedatum: 02.01.2003 Beiträge: 3
Medaillen: Keine
|
Verfasst am: 26.01.2003, 13:01 Titel: |
|
|
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 |
|
|
DerJJ Junior JLI'ler
Anmeldedatum: 24.12.2002 Beiträge: 84
Medaillen: Keine
|
Verfasst am: 26.01.2003, 16:19 Titel: |
|
|
Cool danke!
Aber geht das auch einfacher als mit dem TextOut?
Gibts net sowas wie IntOut ???
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 |
|
|
|
|
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
|