Window in Klassen Kapseln



  • Hast Du das Beispiel dort verstanden??? Wie sieht DEIN CreateWindow(Ex) aus??? In Deinem ersten Beispiel hast Du da was komplett falsch gemacht (this fehlt)...
    Aber wie gesagt, wenn Du das (simple) Beispiel nicht verstanden hast, dann solltest Du dich da mal zuerst reindenken, bevor Du was eigenes machst...



  • Huch

    ich hab inzwischen folgendes in der MSDN rausgefunden

    bei GetWindowLongPtr:

    Remarks

    Reserve extra window memory by specifying a nonzero value in the cbWndExtra member of the WNDCLASSEX structure used with the RegisterClassEx function.

    also bei cbWndExtra sollte man bytes reservieren, geht aber auch ohne (?)

    bei CreateWindowEx:

    lpParam
    [in] Pointer to a value to be passed to the window through the CREATESTRUCT structure passed in the lParam member of the WM_CREATE message sent to the created window by this function before it returns. May be NULL if no additional data is needed.

    also das this im Beispiel hab ich nun zugefügt. jetzt geht es!

    Ich habs jetzt geschnallt.
    Ich hab mich doch auch gewundert, woher der Pointer im lParam des WM_CREATE kommen sollte. *kling* der Groschen ist nun gefallen.
    Wenn ich nun noch die Casts wegkriege, bin ich glücklich.
    Danke vielmals, du hast mir sehr geholfen.



  • Windows-User schrieb:

    Wenn ich nun noch die Casts wegkriege, bin ich glücklich.

    DIe bekommst Du nicht weg... sollten aber auch alle korrekt sein...



  • Jochen Kalmbach schrieb:

    Was soll den das viele casten?

    Jochen Kalmbach schrieb:

    Windows-User schrieb:

    Wenn ich nun noch die Casts wegkriege, bin ich glücklich.

    DIe bekommst Du nicht weg... sollten aber auch alle korrekt sein...

    😕 😕 😕

    Folgende Warnungen bleiben aber:

    ...mainwin.cpp(21) : warning C4312: 'type cast' : conversion from 'LONG' to 'mainwin *' of greater size
    ...mainwin.cpp(27) : warning C4311: 'type cast' : pointer truncation from 'mainwin *' to 'LONG'



  • Ok egal, Warnungen sind da, um ignoriert zu werden 😃
    Aber kann ich nicht C++ Casts verwenden?



  • tja
    reinterpret_cast<>() geht zwar, aber die Warnungen bleiben natürlich die selben.
    also ich bin dann erstmal glücklich.
    Für weitere Kritik hab ich trotzdem noch ein offenes Ohr

    Superdanke nochmal 👍



  • Windows-User schrieb:

    Folgende Warnungen bleiben aber:

    ...mainwin.cpp(21) : warning C4312: 'type cast' : conversion from 'LONG' to 'mainwin *' of greater size
    ...mainwin.cpp(27) : warning C4311: 'type cast' : pointer truncation from 'mainwin *' to 'LONG'

    Kannst Du die Codestellen dazu zeigen!?
    ENtweder hast Du einen alten Compiler (VC2002/2003) oder kein aktuelles PSDK... eigentlich dürften diese nicht kommen, da es in dem aktuellen PSDK auf Win64 schon angepasst wurde... aber vielleicht täusche ich mich auch...

    Ach so... Du solltest natürlich auch "SetWindowLongPtr" und "GetWindowLongPtr" verwenden!!!



  • Jochen Kalmbach schrieb:

    Windows-User schrieb:

    Folgende Warnungen bleiben aber:

    ...mainwin.cpp(21) : warning C4312: 'type cast' : conversion from 'LONG' to 'mainwin *' of greater size
    ...mainwin.cpp(27) : warning C4311: 'type cast' : pointer truncation from 'mainwin *' to 'LONG'

    Kannst Du die Codestellen dazu zeigen!?
    ENtweder hast Du einen alten Compiler (VC2002/2003) oder kein aktuelles PSDK... eigentlich dürften diese nicht kommen, da es in dem aktuellen PSDK auf Win64 schon angepasst wurde... aber vielleicht täusche ich mich auch...

    Ach so... Du solltest natürlich auch "SetWindowLongPtr" und "GetWindowLongPtr" verwenden!!!

    Sorry hab grad beef mit der Schmalzlocke

    Ne hab:
    VSC++2005EE
    PSDK R2 3790.2075 im Mai 2006 installiert
    WinXP SP2, AMDAthlonXP ein 32bitter

    Hab die Get/SetWindowLongPtr() von Anfang an drin, so genau hab ich den anderen Thread noch gelesen.
    äehm eventuell liegts dran, dass ich #define STRICT drin hab?
    Hier die Codestellen:

    mainwin* this_ = reinterpret_cast<mainwin*>(GetWindowLongPtr( hWnd_, GWL_USERDATA ));
    //..
    SetWindowLongPtr( hWnd_, GWL_USERDATA, reinterpret_cast<LONG>(this_) );
    


  • Windows-User schrieb:

    mainwin* this_ = reinterpret_cast<mainwin*>(GetWindowLongPtr( hWnd_, GWL_USERDATA ));
    SetWindowLongPtr( hWnd_, GWL_USERDATA, reinterpret_cast<LONG>(this_) );
    

    Caste bitte korrekt nach "LONG_PTR" und nicht nach "LONG"!

    PS: Könnt Ihr eigentlich das gefrotzel sein lassen? Sonst mach ich hier zu.



  • soory, ich nochmal

    Jochen Kalmbach schrieb:

    ...
    Caste bitte korrekt nach "LONG_PTR" und nicht nach "LONG"!...

    ...mainwin.cpp(29) : warning C4244: 'argument' : conversion from 'LONG_PTR' to 'LONG', possible loss of data

    in der Zeile

    SetWindowLongPtr( hWnd_, GWL_USERDATA, reinterpret_cast<LONG_PTR>(this_) );
    

Anmelden zum Antworten