Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

1

19.03.2007, 21:39

Win API: Bitmap laden und anzeigen

Hallo!
Es muss doch bestimmt eine möglich keit geben eine Bitmap zu laden und anzuzeigen ohne WM_PAINT zu benutzen oder?
Kann man die Bitmap nicht ca. wie ein Button behandeln?
Also mit CreateWindow() ??

Gruß Flo

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

2

19.03.2007, 21:47

wie genau stellst du dir das vor?

3

19.03.2007, 21:55

ca. so:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
HWND bitmap;

bitmap=CreateWindow("Bitmap",
                    filename,
                    WS_VISIBLE | WS_CHILD| WS_BORDER |WS_TABSTOP,
        0,
                    0,
                    600,
                    480,
                    hwnd,
                    NULL,
                    NULL,
                    NULL);


sry aber jetzt merk ich das das voll quatsch ist sry.
Das mit dem filename und so klappt nicht!
Könnte mir trozdem einer mal ein Beispiel geben wie man einfach eine bitmap anzeigt?

Gruß Flo

4

19.03.2007, 22:11

Hmm doch so in etwa kannst du es machen (na ok dein code oben ist quatsch ;) ) ... nimm die "static"-Fensterklasse und gib als Style beim erstellen SS_BITMAP an ... dann kannst du mit STM_SETIMAGE die Bitmap setzen ...

Referenz
Static Controls
Devil Entertainment :: Your education is our inspiration
Der Spieleprogrammierer :: Community Magazin
Merlin - A Legend awakes :: You are a dedicated C++ (DirectX) programmer and you have ability to work in a team? Contact us!
Siedler II.5 RttR :: The old settlers-style is comming back!

Also known as (D)Evil

5

20.03.2007, 15:04

sry.
Aber kannst du mir ein kleines Beispiel geben? Tut mir echt leid.
Doch was ist die "static"-Fensterklasse"?
Ich habe es jetzt mal so probiert (wahrscheinlich wieder schwachsinn ;) )

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
    Bild = CreateWindowEx (
           0,                  
           "Hauptfenster",        
           "",       
           SS_BITMAP, 
           0,       
           0,     
           100,                 
           100,              
           hwnd,        
           NULL,                
           NULL,  
           NULL               
           ); 
           Bild2=LoadBitmap(GetModuleHandle(NULL), "test.bmp");
           SendMessage( Bild,(UINT) STM_SETIMAGE, (WPARAM) IMAGE_BITMAP, (LPARAM) Bild2);  


Gruß Flo

6

20.03.2007, 15:37

?! static ist eine vorregistrierte Fensterklasse ... genau wie edit usw ...


Musst halt mit CreateWindow(Ex) dein CHILD Fenster erzeugen ... das von der Fensterklasse "static" ist ... und als Style halt WS_VISIBLE | SS_BITMAP usw ... wo ist das Problem?!

C-/C++-Quelltext

1
SendMessage(hWndBitmapCtrl,  STM_SETIMAGE,  static_cast<WPARAM>(IMAGE_BITMAP),  reinterpret_cast<LPARAM>(LoadBitmap(GetModuleHandle(NULL), MAKEINTERSOURCE(TEST_BMP)));
odg aufrufen ... um die Bitmap zu setzen ...
Devil Entertainment :: Your education is our inspiration
Der Spieleprogrammierer :: Community Magazin
Merlin - A Legend awakes :: You are a dedicated C++ (DirectX) programmer and you have ability to work in a team? Contact us!
Siedler II.5 RttR :: The old settlers-style is comming back!

Also known as (D)Evil

7

04.04.2007, 14:22

SRy aber ich schaff das nicht!

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
LRESULT CALLBACK Start (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
    static HWND Bitmap;            

    switch (message)                  
    {
           
        case WM_CREATE:
             
             

            Bitmap = CreateWindowEx(WS_EX_CLIENTEDGE,
                                   "static",
                                   "",   
                                   WS_VISIBLE | SS_BITMAP | WS_BORDER | WS_CHILD,
                                   0, 0, 185, 185,
                                   hwnd,
                                   NULL,
                                   ((LPCREATESTRUCT) lParam) -> hInstance,
                                   NULL);



                       
SendMessage(Bitmap,  STM_SETIMAGE,  (WPARAM) IMAGE_BITMAP,  (LPARAM) "Ball.bmp");                 
        
        
             break;
             
                
        case WM_CLOSE:
            Startfenster.Kill();
            break;
        default:                      
            return DefWindowProc (hwnd, message, wParam, lParam);
    }

    return 0;
}

Das will einfach nicht funktionieren!!

Was mache ich schonwieder falsch??
Gruß Flo :(

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

8

04.04.2007, 14:34

Zitat von »"F-Wölkchen"«

C-/C++-Quelltext

1
(LPARAM) "Ball.bmp");


wie sollte es auch!?
lParam braucht ein handle auf eine geladene bilddatei und keinen dateinamen!

das erste was man machen sollte wenn man eine windows message verwendet:
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/shellcc/platform/commctls/staticcontrols/staticcontrolreference/staticcontrolmessages/stm_setimage.asp

Zitat von »"Deviloper"«

C-/C++-Quelltext

1
SendMessage(hWndBitmapCtrl,  STM_SETIMAGE,  static_cast<WPARAM)>(IMAGE_BITMAP),  reinterpret_cast<LPARAM>(LoadBitmap(GetModuleHandle(NULL), MAKEINTERSOURCE(TEST_BMP)));


das steht doch eh wie es geht...

9

04.04.2007, 15:17

Main.cpp

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
                         Bitmap = CreateWindowEx(WS_EX_CLIENTEDGE, 
                                   "static", 
                                   "",    
                                   WS_VISIBLE | SS_BITMAP | WS_BORDER | WS_CHILD, 
                                   0, 0, 185, 185, 
                                   hwnd, 
                                   NULL, 
                                   ((LPCREATESTRUCT) lParam) -> hInstance, 
                                   NULL); 
                                   
     SendMessage(Bitmap,  STM_SETIMAGE, (WPARAM)IMAGE_BITMAP,  (LPARAM) LoadBitmap(NULL, MAKEINTRESOURCE(Startbild)));


resource.h

C-/C++-Quelltext

1
#define Startbild 100


resource.rc

C-/C++-Quelltext

1
2
3
#include "resource.h"

Startbild HBITMAP  "boden.bmp"


DAs klappt nicht ^^^^^^ ^

Das klappt:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
                         Bitmap = CreateWindowEx(WS_EX_CLIENTEDGE, 
                                   "static", 
                                   "",    
                                   WS_VISIBLE | SS_BITMAP | WS_BORDER | WS_CHILD, 
                                   0, 0, 185, 185, 
                                   hwnd, 
                                   NULL, 
                                   ((LPCREATESTRUCT) lParam) -> hInstance, 
                                   NULL); 
                                   
     SendMessage(Bitmap,  STM_SETIMAGE, (WPARAM)IMAGE_BITMAP,  (LPARAM) LoadBitmap(NULL, (char*)OBM_CHECK));


WAhrscheinlich sind die resourcen nicht richtig!°
Doch ich finde keine ergebnisse bei google!
Gruß Flo

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

10

04.04.2007, 15:21

http://msdn2.microsoft.com/en-us/library/ms532309.aspx

schau dir nochmal ganz genau an was der unterschied zwishen deinem code und dem von deviloper geposteten code ist...richtig, da steht ja noch ein GetModuleHandle() drin :)

Werbeanzeige