GDI Debug und Normalmodus VC++60



  • Also, wenn ich das Programm über F5 (= Debugger) aufrufe, dann läuft es. CTRL-F5 (ich vermute mal Release), dann läuft es nicht, sondern wie oben beschrieben. Also: InvalidateRect mache ich nicht. Wie müsste das denn aussehen bzw. wie bekomme ich denn hierzu die richtigen Werte für die Parameter insbesondere für die RECT-Struktur, oder ist das nicht nötig?

    Gruß

    Oliver 😕



  • Zeig mal den Code her



  • Also, der Tip mit dem InvalidateRect war richtig, alles was jetzt noch falsch läuft ist der graue Hintergrund der erstellten Schriftart. Wenn Ihr da noch einen Tip hättet?? Wäre super ...

    Noch ein Zusatz: Das Problem ist weg, wenn ich einmal das Fenster über Minimieren schließe und wieder öffne!

    Gruß

    Oliver

    [ Dieser Beitrag wurde am 06.01.2003 um 19:57 Uhr von oj0169 editiert. ]



  • man du hast vielleicht eine struktur nicht richtig ausgefüllt oder so. beim debugmodus werden die automatisch mit nullen gefüllt



  • Was genau verstehst du unter grauem Hintergrund?
    Siehst du noch alten Text, oder hast du ein Kästchen um deine Textausgaben?



  • @Flenders,

    die Schrift ist zu sehen, hat aber einen grauen Hintergrund. Wenn das Fenster/dr Dialog geschlossen und wieder geöffnet wird, ist alles normal, also Schrift ohne grauen Hintergrund. Achso, vielleicht muss ich das noch sagen: In der GDI befindet sich ein buntes Bitmap (Ein Formular), auf das ich meine Schrift schreibe. Hat vielleicht damit was zu tun.

    Gruß

    Oliver



  • Du zeichnest aber in WM_PAINT immer alles neu, oder?
    Du zeichnest wahrscheinlich das Bitmap nicht mit neu, deshalb scheint das grau des Dialogs durch?!

    [ Dieser Beitrag wurde am 06.01.2003 um 20:31 Uhr von flenders editiert. ]



  • Hallo Zusammen, hallo Flenders,

    da alles bisher nicht geholfen hat, poste ich noch mal den Teil des Codes unter WM_PAINT. Das Blättern funktioniert, aber sobald geblättert wurde, wird die erstellte Schrift im Vordergrund wie gehabt schwarz dargestellt, aber es entsteht nach betätigen von Button vor oder Button zurück ein grauer Hintergrund. Vielleicht weißt Du eine Lösung. Danke schon mal.

    ( Sorry, aber die C++-Tags funktionieren im Moment nicht !! 😞 )
    switch(message)
    {
    case WM_PAINT:

    hdc = BeginPaint(hDlg, &ps);

    // Neuen Font erstellen
    yLogPixelsPerInch = GetDeviceCaps(hdc, LOGPIXELSY);
    lf.lfHeight = -MulDiv(14,yLogPixelsPerInch, 72);
    lf.lfWidth = 0;
    hfont = (HFONT) CreateFontIndirect(&lf);
    if (hfont == 0)
    {
    lastError = GetLastError();
    wsprintf(str, "Fehler beim Erstellen eines neuen Fonts.\nFehler-Code: %d", lastError);
    MessageBox(hDlg, str, "Fehler", MB_ICONERROR);
    }

    GetObject(hfont, sizeof(HFONT), &font);

    // Auswahl der erstellten Schrift
    retcode = SelectObject(hdc,hfont);

    hInstance = GetModuleHandle(0);
    hBitmap = (HBITMAP) LoadBitmap(hInstance,MAKEINTRESOURCE(IDB_BITMAP1));
    if(!hBitmap)
    {
    lastError = GetLastError();
    wsprintf(str, "Fehler beim Bitmapladen.\nFehler-Code: %d", lastError);
    MessageBox(hDlg, str, "Fehler", MB_ICONERROR);
    }
    GetObject(hBitmap, sizeof(BITMAP), &bitmap);

    hdcMem = CreateCompatibleDC(hdc);
    SelectObject(hdcMem,hBitmap);
    BitBlt (hdc, 10, 10, bitmap.bmWidth, bitmap.bmHeight, hdcMem, 0, 0, SRCCOPY) ;

    // Hier nun den Text eintragen

    wsprintf(str, "Commerzbank Aachen");
    TextOut(hdc, 60,65,str,lstrlen(str));

    DeleteObject(hfont);
    DeleteObject(hBitmap);
    DeleteDC(hdcMem);
    EndPaint(hDlg, &ps);
    return TRUE;

    Gruß

    Oliver

    [ Dieser Beitrag wurde am 07.01.2003 um 19:34 Uhr von oj0169 editiert. ]

    [ Dieser Beitrag wurde am 07.01.2003 um 19:35 Uhr von oj0169 editiert. ]



  • Tut mir Leid, ich sehe leider keinen Code :(.

    cya 🙂



  • Aha, dann werde ich mich noch gedulden, wie es sich für einen Jedi gehört, Master Luke.

    cya 🙂



  • @MagicCreator,

    sorry, aber Du bist zu schnell für den Durschnittsmitteleuropäer 😉 Die CPlusPlus-Tags haben irgendwie nicht funktioniert, es wird behauptet es seien irgendwelche ungültigen Zeichen in meinem Beitrag. 😃

    Gruß

    Oliver



  • Hi nochmal,

    Beitrag oben habe ich editiert mit Quellcode.

    Gruß

    Oliver



  • Bitmaps würd ich nie in der WM_PAINT laden. Und da oben fehlt ein "PAINTSTRUCT ps;", oder hast du das wo anders?

    cya 🙂



  • Hi nochmal,

    das Problem ist ja, dass ich bei jedem Blättern einen neuen Datensatz in einem Formular (Bitmap) darstelle. Deswegen glaube ich, dass ich das in WM_PAINT malen muss. Mit InvalidateRect erkläre ich den kompletten Fensterinhalt für ungültig dann, wenn der Button für vor oder zurück gedrückt wird und es wird neu gezeichnet (senden einer WM_PAINT-Message).

    Paintstruct ist übrigens als ps deklariert.

    Ich wunder mich nur über den grauen Hintergrund nach dem Blättern. Beim Zeichnen ist noch alles Okay, aber wenn man einen Datensatz vorblättert erhält die Schrift (Text des Datensatzes, der in das Formular eingetragen wird) diesen grauen Hintergrund (vom Fensterhintergrund).
    Ich hoffe, ich konnte mich halbwegs verständlich ausdrücken.

    Gruß

    Oliver 😃

    [ Dieser Beitrag wurde am 07.01.2003 um 20:04 Uhr von oj0169 editiert. ]



  • Mal wieder ein Tipp von mir:
    Lösche nie ein GDI-Objekt, solange es noch in einem DC selektet ist.
    Wie schon gesagt wurd, das Bitmap einmal am Anfang laden und in WM_PAINT nur noch zeichnen.

    Schon mal SetBkMode(hdc, TRANSPARENT); versucht, vieleicht ist ja gar nicht der Fensterhintergrund?



  • @Der Gute Daniel,

    vielen Dank, es funktioniert mit SetBkMode. Ich hatte schon SetBkColor versucht, aber das hatte nicht funktioniert.

    Prima also, herzlichsten Dank an Alle.

    Gruß

    Oliver



  • Das hatte ich mir auch schon überlegt, aber wieso hat's nach dem Minimieren dann schon vorher geklappt?! 🙄


Anmelden zum Antworten