HBRUSH notwendig???



  • Hallo zusammen,

    vieleicht kann mir ja jemand mal erklaeren was der Unterschied zwischen folgenden beiden Zeilen Code ist.
    Beim Kompilieren und Ausfuehren gibt es zumindestens keien Unterschiede.

    Benutze DEV C++ in Version 4.9.9.0

    Und versuche mich gerade an meinem ersten selbstprogrammierten Fenster.
    Was hat das (HBRUSH) dort ueberhaupt zu suchen? 😕
    hbrBackground ist zwar vom Typ HBRUSH aber mir will nicht in den Schaedel
    was es vor dem Funktionsaufruf bewirkt.

    wincl.hbrBackground =  (HBRUSH) GetStockObject(WHITE_BRUSH);
    
    wincl.hbrBackground =  GetStockObject(WHITE_BRUSH);
    

    Gruesse an alle da draussen!
    haderlump22



  • Das (HBRUSH) ist ein Cast.

    GetStockObject(WHITE_BRUSH) liefert als Rückgabetyp ein HGDIOBJ zurück, Du brauchst aber einen HBRUSH.

    Damit Dein Compiler nicht meckert (zum Beispiel meckert der VS .NET 2003: error C2440: '=': 'HGDIOBJ' kann nicht in 'HBRUSH' konvertiert werden), sagst Du ihm "Mir ist klar, das ich da einem HBRUSH ein HGDIOBJ zuweisen will, also laß mich mal machen".



  • haderlump22 schrieb:

    hbrBackground ist zwar vom Typ HBRUSH ...

    Und GetStockObject liefert ein HGDIOBJ zurück.
    Der Typ in den Klammern ist ein expliziter Cast und sorgt dafür, dass der Compiler die zugewiesene Variable als Typ HBRUSH ansieht.

    GetStockObject soll nämlich auch andere Arten (Fonts, Pens, etc.) zurückliefern können, der Programmierer weiß aber, was für ein Typ als Rückgabewert zu erwarten ist. Deswegen ist der Rückgabetyp der Funktion der "kleinste gemeinsame Nenner", und muss bei Bedarf präziser beschrieben werden.



  • Danke fuer die Information!

    Tja so tief stecke ich dann doch noch nicht drin,
    um diesen Cast erkennen zu koennen. 😃



  • Falls du C++ programmierst (erkennst du daran, dass deine Dateien auf .cpp enden), solltest du dir diese Art des Castens ganz schnell abgewöhnen und nie wieder anfassen.
    In C++ macht man es so:

    wincl.hbrBackground =  reinterpret_cast<HBRUSH>(GetStockObject(WHITE_BRUSH));
    


  • Hi,

    das Compilieren mit

    reinterpret_cast
    

    bricht bei mir aber ab da er das nicht kennt.

    Meldung:
    `reinterpret_cast' undeclared (first use in this function)

    Muss ich da einen bestimmten Header includieren? 😕


Anmelden zum Antworten