Español
Fuente/ Codesnippets

Nativ Nsubclass Subclassing Xpse

 

Nico
Madysa
Posesiones me de tiempo el Subclassing con XPSEs NProcs algo bequemer gestaltet; tal vez gefällts sí jemandem.
KompilierenMarcaSeparación
 {$iq}
usermem&: frei verwendbarer Speicher, auf den man in der Subclassprozedur zugreifen kann
Zugriff über Adresse GetWindowLong(sWnd&,~WK_USERDATA)
wnd&: Handle des subzuclassenden Controls
paddr&: Adresse der Subclassprozedur; über ProcAddr(meineProzedur,4) zu erhalten
Um das Subclassing abzuschalten einfach für paddr&=0 aufrufen; siehe Beispiel

{nproc nSubclass

    nproc nSubclass

        parameters usermem&,wnd&,paddr&
        declare owp&,al&

        if paddr& Anschalten

            eigentliches Subclassing; Neue WindowProc wird eingeschoben
            owp& = SetWindowLong(wnd&,gwl_wndProc,paddr&)
            Bereich wird angelegt
            al& = dim(4 + usermem&)
            Am Offset 0 wird in jedem Falle die Adresse der alten WindowProc gemerkt
            Long al&,0 = owp&
            Adresse des Bereiches wird gemerkt
            SetWindowLong(wnd&,gwl_userData,al&)
            else Ausschalten
            Bereichsadresse zurückholen
            al& = GetWindowLong(wnd&,gwl_userData)
            Alte WindowProc wieder einsetzen
            SetWindowLong(wnd&,gwl_wndProc,Long(al&,0))
            Bereich freigeben
            Dispose(al&)

        endif

        return 1

    endproc

    ---BEISPIEL-----------
    Subclassprozedur für das Hauptfenster

    {nproc hWnd.Sub

        nproc hWnd.Sub

            parameters wnd&,msg&,wParam&,lParam&

            if msg& = WM_CLOSE

                Hauptprogramm mit einer Usermessage benachrichtigen, dass das Programm beendet werden soll
                SendMessage(%hWnd,WM_USER+1,0,0)
                return 0

            else

                in allen anderen Fällen die normale Windowproc aufrufen
                Am Offset 0 legt nSubclass die Adresse der alten WindowProc ab
                return CallWindowProc(Long(GetWindowLong(wnd&,gwl_userData),0),wnd&,msg&,wParam&,lParam&)

            endif

        endproc

        Window 0,0 - %MaxX,%MaxY
        nSubclass(0,%hWnd,ProcAddr(hWnd.Sub,4)) Subclassing anschalten
        Usermessage, über die die Subclassproc mit dem Hauptprogramm kommuniziert
        Usermessages WM_USER+1
        Hauptschleife

        while 1

            waitinput
            Wenn nachricht von der Subclassproc kommt, ist Schicht im Schacht.

            if %UMessage = WM_USER+1

                MessageBox("Ende im Gelände!","Aus die Maus!",0)
                break

            endif

        wend

        Subclassing abschalten, um den Bereich hinter gwl_userData zu disposen
        nSubclass(0,%hWnd,0)
        end

So puede ser el native Subclassing fast genauso como el xprofane uso. Zudem es uno no mehr en una Subclassproc eingeschränkt.
Yo hoffe, lo son no Fehler drin y es ordentlich kommentiert.
 
Nico Madysa
23.02.2010  
 



Zum Quelltext


Título del Tema, max. 100 Signo.
 

Systemprofile:

Kein Systemprofil creado. [anlegen]

XProfan:

 Contribución  Font  Smilies  ▼ 

Bitte registro en una Contribución a verfassen.
 

Tema opciones

3.436 Views

Untitledvor 0 min.
Andre Rohland13.06.2019
rquindt27.08.2016
Ernst06.05.2016
Rc24.12.2015
Más...

Themeninformationen

Dieses Thema ha 1 subscriber:

Nico Madysa (1x)


Admins  |  AGB  |  Applications  |  Autores  |  Chat  |  Política de Privacidad  |  Descargar  |  Entrance  |  Ayuda  |  Merchantportal  |  Pie de imprenta  |  Mart  |  Interfaces  |  SDK  |  Services  |  Juegos  |  Búsqueda  |  Support

Ein Projekt aller XProfan, el lo son!


Mi XProfan
Privado Noticias
Eigenes Ablageforum
Temas-Merkliste
Eigene Beiträge
Eigene Temas
Zwischenablage
Cancelar
 Deutsch English Français Español Italia
Traducciones

Política de Privacidad


Wir uso Cookies sólo como Session-Cookies wegen el technischen Notwendigkeit y en uns hay no Cookies de Drittanbietern.

Wenn du hier en unsere Webseite klickst oder navigierst, stimmst du unserer Erfassung de Informationen en unseren Cookies en XProfan.Net a.

Weitere Informationen a unseren Cookies y dazu, como du el Kontrolle darüber behältst, findest du en unserer nachfolgenden Datenschutzerklärung.


einverstandenDatenschutzerklärung
Yo möchte no Cookie