tutorials.de Buch-Aktion 05/2012
ERLEDIGT
NEIN
ANTWORTEN
1
ZUGRIFFE
390
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Thomasio Thomasio ist offline Mitglied Platin
    Registriert seit
    Aug 2006
    Beiträge
    680
    Ich habe ein globales Flag, anhand dem mein Fenster seine Hintergrundgrafik aussucht

    Im WM_PAINT steht also:

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    
     
    case WM_PAINT:
    {
        int ABC = IDB_MYBACKGROUND2;
        if(bgsetting == 1)
          {
              ABC = IDB_MYBACKGROUND1;
          }
        HDC hdc;
        HBITMAP g_hbmBG = NULL;
        BITMAP bm;
        PAINTSTRUCT ps;
        g_hbmBG = LoadBitmap(GetModuleHandle(NULL), MAKEINTRESOURCE(ABC));
     
    ...
    ...
    ...
     
    }
    break;

    Das funktioniert so weit prima, habe ich schon in diversen Anwendungen benutzt

    Aber jetzt habe ich ein Problem, das verstehe ich nicht

    Mache ich:

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    
     
    case WM_LBUTTONDOWN:
    {
        if(bgsetting == 1)
          {
              bgsetting = 0;
              SendMessage(myWindow, WM_PAINT, 0, 0);
              return 0;
          }
        if(bgsetting == 0)
          {
              bgsetting = 1;
              SendMessage(myWindow, WM_PAINT, 0, 0);
              return 0;
          }
    }
    break;

    dann macht er gar nichts, bzw. er macht schon, aber die Grafik im Fenster ändert sich nicht
    Ich habe mir ein dutzend MessageBoxen quer über den Code verteilt, er kommt auf klick schön brav zum paint, wählt dort auch die richtige Grafik aus, läuft quer durch den WM_PAINT, aber im Fenster sehe ich keine Änderung, sprich die Grafik bleibt immer die Gleiche

    Mache ich dagegen:

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    
     
    case WM_LBUTTONDOWN:
    {
        if(bgsetting == 1)
          {
              bgsetting = 0;
              ShowWindow(myWindow, SW_HIDE);
              ShowWindow(myWindow, SW_SHOW);
              return 0;
          }
        if(bgsetting == 0)
          {
              bgsetting = 1;
              ShowWindow(myWindow, SW_HIDE);
              ShowWindow(myWindow, SW_SHOW);
              return 0;
          }
    }
    break;

    dann wechselt er schön brav bei jedem Klick die Grafik aus

    Man berichtige mich wenn ich etwas übersehen habe, aber HIDE / SHOW macht doch auch nur einen WM_PAINT hinterher

    Warum funktioniert WM_PAINT direkt bei mir nicht?
     

  2. #2
    jsendrow Tutorials.de Gastzugang
    Es ist nicht unbedingt eine gute Idee Systemmessages "von hand" zu verschicken. Ich könnte jetzt auch nicht sagen was man alles beachten muß dazu.

    Besser ist es wenn Du Invalidate() bzw InvalidateRect() benutzt. damit gibst du der Window-Engine an welche Bereich neu gezeichnet werden sollen udn die kann dann entsprechende WM_PAINT messages mti den passenden Parametern selbst erzeugen.
     

Ähnliche Themen

  1. Teile von *.Bmp paint
    Von Neu1234567890 im Forum C/C++
    Antworten: 10
    Letzter Beitrag: 16.08.10, 21:35
  2. Paint.NET
    Von SNOOK99 im Forum Sonstige Grafik-Programme
    Antworten: 1
    Letzter Beitrag: 30.03.08, 19:30
  3. Paint() und ist zu langsam
    Von BabyMitSchnully im Forum Swing, Java2D/3D, SWT, JFace
    Antworten: 1
    Letzter Beitrag: 11.11.06, 12:54
  4. ink 'n paint
    Von big hero im Forum 3D Studio Max
    Antworten: 19
    Letzter Beitrag: 31.12.04, 16:04
  5. paint() im Frame
    Von vaporizer im Forum Java
    Antworten: 3
    Letzter Beitrag: 26.04.04, 15:49