Bitmap als dialoghintergrund

soeni1987

Mitglied
ich hab noch ein problem, zum programmstart wird ein dialog aufgerufen, der eingabezeilen buttons usw. enthält, soweit sogut (er hat keine titelleiste usw. lässt sich also nicht verschieben)
nun möchte ich den dialoghintergrund ändern. ich hab zwar was gefunden, jedoch funktioniert das nicht. das bitmap liegt in einer resource. der code siet momentan so aus: wie kann ich ihn abändern, damit das bild auch erscheint.

Code:
     case WM_INITDIALOG:
          SetWindowText(hDlg,"Anmelden");   //wird nicht gebraucht, da kein ramen
          //hInstance = ((LPCREATESTRUCT) lParam)->hInstance;
          hBitmap = LoadBitmap (NULL, TEXT("IDB_BACKGROUND"));
          
     return TRUE; 
     case WM_PAINT:
          hdc = BeginPaint(hDlg, &ps);
             hdcMem = CreateCompatibleDC(hdc);
             SelectObject(hdcMem,hBitmap);
             BitBlt(hdc,0,0,286,214,hdcMem,0,0,SRCCOPY);
          DeleteDC(hdcMem);
          EndPaint(hDlg, &ps);
     return true;

PS: ich benutze dev c++ und die Winapi

danke für eure hife im vorraus
 
Hallo,
dein Problem sollte eigentlich hier liegen:
Code:
hBitmap = LoadBitmap (NULL, TEXT("IDB_BACKGROUND"));

Zum Laden einer Resource brauchst du die Instanz des jeweiligen Modules!
Ersetze die Zeile deines Codes mit dieser und es sollte funktionieren.
Code:
hBitmap = LoadBitmap ( hInstance , TEXT("IDB_BACKGROUND"));

Gruß
 
mein problem ist ich hab die datei main (in der winmain steht). da hab ich natürlich den hInstance handle aber wie bekomme ich den in datei nr. 2, in der die dialognachrichtenwarteschleife ist. klar habe ich eine head.h, in der ich mit if_define was deklarieren kann, sieht wiefolgt aus:
Code:
/// Fenster global
#ifndef GLOBAL_VARS_INCLUDED  //nur einfügen, wenn nicht da
#define GLOBAL_VARS_INCLUDED      

//globale variablen

 static char szBenutzer[] = "Sönke";
 static HINSTANCE hInstance;    
        HINSTANCE inst; 

#endif

aber da kommt dann immer ein fehler multible definition of inst. komischerweise geht das bei staticvariablen nur bei "normalen halt nicht".

wie bekomme ich also den hInstance in meine dialogdatei mit der Dialognachrichtenrutine

edit: und mit ner static variablen geht das nicht.
 
Zuletzt bearbeitet:
Hallo,

du solltest die Variable nicht im Header verwenden, sondern als globale Variable in der cpp der WinMain anlegen und in anderen Dateien mit "extern" bekannt machen.

Hauptdatei:
C++:
HINSTANCE g_hInststance;

int WINAPI WinMain( HINSTANCE hInstance,
                    HINSTANCE hPrevInstance,
                    LPSTR     lpCmdLine,
                    int       nCmdShow )
{
    g_hInststance = hInstance;         

    // ...

    return 0;
}
Andere Datei:
C++:
extern HINSTANCE g_hInststance;

// ...
Gruß
MCoder
 
Zurück