Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (WinAPI, Konsole) » Parent-Background-Color ändern, ohne Beleidigung und kompetent

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 < [ 2 ]
000
14.03.2007, 10:07 Uhr
me-S-on



Nun , dies geht an den Threadschliesser von vorhin:
Wir waren doch gerade dabei, es zu besänftigen.
Ok, noch einen Thread, in dem ich normal frage, aber was dann als Antwort kommt, dafür kann ich nichts.
Nun, mein Problem ist immer noch: Ein Parentfanster soll durch einen Klick auf einen child button die Hintergrundfarbe ändern.
Der gesamte code steht im geschlossenen Thread dazu, hier nur die neuesten Änderungen, die aber IMMER NOCH NICHT klappen:

Code:

// Hier das, was der child-Button beim Klick tut:

case WM_LBUTTONDOWN:
      {
        switch (LOWORD(wm_Wflags))
        {
          case 2:
          {            
            
            SendMessage(mwinhan,WM_PAINT,0,1); // LPARAM als Schalter
            //InvalidateRect( mwinhan,&clrect,TRUE);    
          break;
          }




Nun, die MessageBox erscheint, das heisst, LPARAM wird gesetzt, wenn WM_PAINT
versendet wird. Da aber WM_PAINT doch die zeichnen-funktionen unterstützt, frage ich mich, warum zum TEUFEL kein Viereck gezeichnet wird.
Danach kann ich ja immer noch den Background ändern, aber ich hätte WNIGSTENS erstmal ein viereck.
Das komische: Packe ich es in irgendwelche anderen Nachrichten-cases, zB den Buttonclick selber, und benutze GetDc, dann passiert was. Natürlich wird beim neuzeichnen der Inhalt wider gelöscht, aber er soll konstant bleiben, da dachte ich, ich packe es in dei WM_PAINT.
Nun wird die Message-Box zwar ausgegeben, aber nicht das Viereck.
Ich wette, ich übersehe nur ne Kleinigkeit
->

Code:

// Hier das, was daraufhin mit dem Parent geschehen soll ( erst mal test: nur ein Rechteck)

case WM_PAINT:
    {
      
       if(wm_Lflags == 1)  // wenn Schalter gesetzt, also Button geklickt wurde
//------------------------------------------------------------------------------
       {
          /* test, if wmLparam is set*/ MessageBox(NULL,"LPARAM is set", "Set?",MB_OK);
          hdevcon = BeginPaint( mwinhan,&paintinfo);
         HGDIOBJ anything = SelectObject(hdevcon,CreateSolidBrush(RGB(0,0,0)));
         // HINZUGEFÜGT: Resultat : nichts geschieht
          Rectangle(hdevcon,20,20,20,20);
          EndPaint( mwinhan,&paintinfo);
//------------------------------------------------------------------------------
      }
     else
    {            
       const char szinfo[] = "Two button-children";      
       hdevcon = BeginPaint(mwinhan,&paintinfo);
       SetBkMode(hdevcon,TRANSPARENT);// <- HIER!!!
       TextOut(hdevcon,clrect.right/4,clrect.bottom/8,szinfo,strlen(szinfo));      
       EndPaint( mwinhan,&paintinfo);
     }
    break;
    }    




Danke sehr schonmal
--
- Bonus vir semper tiro -

Dieser Post wurde am 14.03.2007 um 10:27 Uhr von me-S-on editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
14.03.2007, 10:18 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


du setzt keine farbe und keinen "zeichenstift"
--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
14.03.2007, 10:23 Uhr
me-S-on



HÄH?
Laber, so simpel?
Kann nicht!
Ich dachte, er würde dann den defeult nehmen, von weiss mit schwarzem Rand.
Aber ich check es dennoch!
Ich werde nun ein Object selecten.
Und meinen vorigen Post dementsprechend editieren!
--
- Bonus vir semper tiro -
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
14.03.2007, 10:30 Uhr
me-S-on



Also, wie oben beschrieben: Es geschieht nichts!!!
Weiss denn wirkich keiner, was ich da vergessen habe?!?!?!
--
- Bonus vir semper tiro -
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
14.03.2007, 13:59 Uhr
Bruder Leif
dances with systems
(Operator)


Du musst WM_ERASEBKGND abfangen und da drin das Fenster neu zeichnen. Alternativ in der WM_PAINT, wenn Dich das Geflacker nicht stoert.
NB: Rectangle(HDC, 20, 20, 20, 20); kann nicht funktionieren, da die Rectangle()-Funktion nicht Breite und Hoehe, sondern die Koordinaten der linken oberen/rechten unteren Ecke des Rechtecks haben will. Dann muss zu den letzten beiden Werten noch jeweils 1 dazuaddiert werden, da intern von Windows wieder jeweils 1 abgezogen wird. Und dann sollte das Rechteck auch gefuellt werden...
--
Mit 40 Fieber sitzt man nicht mehr vor dem PC.
Man liegt im Bett.
Mit dem Notebook.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
14.03.2007, 14:01 Uhr
Bruder Leif
dances with systems
(Operator)


Achja, lass TRANSPARENT weg und behandle WM_PAINT unabhaengig von wm_Lflags immer gleich. Lieber eine Variable zum merken, ob der Button schon mal angeklickt wurde...
--
Mit 40 Fieber sitzt man nicht mehr vor dem PC.
Man liegt im Bett.
Mit dem Notebook.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
14.03.2007, 14:24 Uhr
~me-S-on
Gast


Also, danke erstmal, LEIF:
Transparent war vorher nicht drin, tat es nur rein, damit Devil Ruhe gibt.
Es hat vorher auch nicht funktioniert.
-
Das Rechteck? Ou, shiat, ich habe da was übersehen. Sollte ja nicht dort aufhören, wo es anfängt.
Bei Korrektur: Dennoch kein Rectangle.
-
Die Schaltvariable initialisiere ich am Anfang der WndProc global mit 0, setze sie auf eins beim Buttonclick, sende dann WM_PAINT nochmal. Dabei geschieht noch weniger, nichtmal die TestmessageBox kommt noch, diese Variable fragt der bei der If-Schleife in der WM_PAINT einfach nicht ab, es geschieht nichts!
-
Daher-> SendMessage (mwinhan, WM_PAINT,0,1), da der letzte Parameter von WM_PAINT eh nicht verwendet wird, nehme ich den als Flag, diese Abfrage klappt zumindest.
-
Die Sache mit dem WM_ERASEBKGND habe ich mir, ich gebe zu , auch schon vornehmen wollen, und auf Grund deines Tipps tue ich das jetzt auch, allerdings zeichne ich NUR den Background neu.
Gibbet denn dafür nicht ne Funktion , die einfach den hBrBackground aus der WNDCLASS-Struktur temporär überschreibt?!?!!!
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
14.03.2007, 14:38 Uhr
xXx
Devil


ich sach mal nichts mehr dazu ... aber zu deiner Anschuldigung:

Zitat:
Transparent war vorher nicht drin, tat es nur rein, damit Devil Ruhe gibt.
... ich hab deinen Aufruf(der Fehlerhaft war) nur korrigiert. Du hattest dort einen Farbwert angegeben ...
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
008
14.03.2007, 15:01 Uhr
Guybrush Threepwood
Gefürchteter Pirat
(Operator)



Zitat von xXx:
ich sach mal nichts mehr dazu ... aber zu deiner Anschuldigung:

Zitat:
Transparent war vorher nicht drin, tat es nur rein, damit Devil Ruhe gibt.
... ich hab deinen Aufruf(der Fehlerhaft war) nur korrigiert. Du hattest dort einen Farbwert angegeben ...

Jetzt kriegt euch mal wieder ein
Deine Antwort in dem anderem Thread war auch nicht in Ordnung, aber die Sache ist jetzt erledigt und hier kommen nur noch Sachen zum Thema rein.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
009
14.03.2007, 16:24 Uhr
Bruder Leif
dances with systems
(Operator)


Mir faellt gerade noch was dazu ein: Sollte WM_PAINT nicht ausschliesslich vom Betriebssystem geschickt werden? Was ist mit InvalidateRect()?
--
Mit 40 Fieber sitzt man nicht mehr vor dem PC.
Man liegt im Bett.
Mit dem Notebook.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 < [ 2 ]     [ C / C++ (WinAPI, Konsole) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: