Deutsch
C ++ Forum

&wParam enthält nicht den richtigen Wert

 

Georg
Hovenbitzer
Hallo zusammen,

beim nachfolgenden Code habe ich das Problem, dass nach der Übersetzung in der Variable &wParam nicht der richtig Wert enthalten ist. Es sollte der gleiche Wert sein wie Button&, ist aber bei mir immer 2.
Alle anderen Werte stimmen !
KompilierenMarkierenSeparieren
Def HiWord(1) (@&(1)  $10000)
Declare Button&
WindowStyle 512 + 16 + 8 + 2
WindowTitle "Test"
Window 100,100-400,300
UserMessages $0021,$0111,$0010
~WM_MOUSEACTIVATE,~WM_COMMAND,~WM_CLOSE
Button& = @Create("Button",%hWnd,"rechts Klick?",100,100,200,100)

WhileNot %UMessage = $0010

    WaitInput

    If %UMessage =$0021		~WM_MOUSEACTIVATE

        Print &wParam
        Print Button&
        Print HiWord(&ULParam)

        If (&wParam = Button&) And (HiWord(&ULParam) = $0204)	~WM_RBUTTONDOWN

            Print "Treffer"

        EndIf

    EndIf

EndWhile

End
 
Viele Grüsse, Georg Hovenbitzer(Windows XP Pro, XProfan 11.2, Profan2Cpp 1.6a)
12.11.2005  
 




Sebastian
König
Hallo Georg,

leider scheint das eine der Situationen zu sein, in denen sich die unvermeidlichen kleinen Unterschiede im Message-Handling bemerkbar machen

Wenn ich das (mit Spy++) richtig ermittelt habe, stammt der Wert, der in &WParam steht, nicht von WM_MOUSEACTIVATE , sondern von einer vorangegangenen WM_SETCURSOR -Nachricht. Es ist also mehr oder weniger Zufall, dass das so passt und lässt sich wohl nicht mit Sicherheit reproduzieren...

Wenn es nur darum geht, den Rechtklick auf den Button abzufragen, müsste es besser funktionieren, WM_PARENTNOTIFY  als UserMessage zu nehmen.

MfG

Sebastian
 
Windows XP, XProfan/Profan² 4.5 bis 11
Profan2Cpp-Homepage:  [...] 
Alte Profan²-Seite:  [...] 
13.11.2005  
 




Georg
Hovenbitzer
Hallo Sebastian,

danke für den Tip mit WM_PARENTNOTIFY.
Nur wie bekomme ich nun an die Adresse von Button& ohne &wParam abzufragen ?
Hast du da einen Tip für mich ?
KompilierenMarkierenSeparieren
Def HiWord(1) (@&(1)  $10000)
Def LoWord(1) @&(1) & $FFFF
Declare Button&
WindowStyle 512 + 16 + 8 + 2
WindowTitle "Test"
Window 100,100-400,300
UserMessages $0111,$0010,$0210
~WM_MOUSEACTIVATE $0021
~WM_COMMAND $0111
~WM_CLOSE $0010
Wm_parentnotify $0210
Button& = @Create("Button",%hWnd,"rechts Klick?",100,100,200,100)

WhileNot %UMessage = $0010

    WaitInput

    If %UMessage =$0210 Wm_parentnotify

        Print LoWord(&UwParam)," = ","516" ~WM_RBUTTONDOWN
        Print "?"," = ",Button&

        If (&wParam = Button&) And (LoWord(&UwParam) = 516)	~WM_RBUTTONDOWN

            Print "Treffer"

        EndIf

    EndIf

EndWhile

End
 
Viele Grüsse, Georg Hovenbitzer(Windows XP Pro, XProfan 11.2, Profan2Cpp 1.6a)
13.11.2005  
 




Georg
Hovenbitzer
Hallo Sebastian,

ich habe ein Lösung gefunden die in der Übersetzten Version sehr gut funktioniert.

Ich lese mit GetCursorPos() die Mausposition aus und mit WindowFromPoint() welches Control sich darunter befindet.
KompilierenMarkierenSeparieren
Def GetCursorPos(1) !"USER32","GetCursorPos"
Def WindowFromPoint(2) !"USER32","WindowFromPoint"
Def Hiword(1) (@&(1)  $10000)
Declare FSpeicher&
Declare TFSpeicher&
Declare MausPos#
Dim MausPos#,8
WindowStyle 512 + 16 + 8 + 2
Windowtitle "Test"
Window 0,0-800,600
Usermessages $0021,$0111,$0010
~WM_MOUSEACTIVATE,~WM_COMMAND,~WM_CLOSE
FSpeicher& = @Control("COMBOBOX","",$54310003,330,32,100,90,%hWnd,90,%hInstance)
TFSpeicher& = @Create("Tooltip",%hWnd,FSpeicher&,"siehe rechte Maustaste")

WhileNot %Umessage = $0010

    WaitInput

    If (%Umessage =$0021) And (Hiword(&Ulparam) = $0204)~WM_MOUSEACTIVATE

        Clear MausPos#
        GetCursorPos(MausPos#)

        If (WindowFromPoint(@Long(MausPos#,0),@Long(MausPos#,4)) = FSpeicher&)~WM_RBUTTONDOWN

            Print "Treffer"

        EndIf

    EndIf

EndWhile

Dispose MausPos#
End
 
Viele Grüsse, Georg Hovenbitzer(Windows XP Pro, XProfan 11.2, Profan2Cpp 1.6a)
14.11.2005  
 




Sebastian
König
Hallo Georg,

warst etwas schneller als ich Zur Vollständigkeit hier noch ein alternativer (aber ganz ähnlicher) Vorschlag:

Bei WM_PARENTNOTIFY wird (jedenfalls bei Mausereignissen) auch die aktuelle Mausposition in &ULParam (HiWord/LoWord) übergeben. Hier würde es also auch so funktionieren:
KompilierenMarkierenSeparieren
...
Long Mouspos#,0 = LoWord(&ULParam)
Long Mouspos#,4 = HiWord(&ULParam)

If (ChildWindowFromPoint(%hwnd,Mouspos#) =

    ...

Achtung: ChildWindowFromPoint(), da die Koordinaten relativ sind.

MfG

Sebastian

P.S.: In Deinem Code ist der Aufruf Windowfrompoint(@Long(Mauspos#,0),@Long(Mauspos#,4)) nicht ganz richtig... es sollte einfach WindowFromPoint(Mouspos#) sein
 
Windows XP, XProfan/Profan² 4.5 bis 11
Profan2Cpp-Homepage:  [...] 
Alte Profan²-Seite:  [...] 
14.11.2005  
 




Georg
Hovenbitzer
Hallo Sebastian,

vielen Dank für den Tip.
Bei WindowFromPoint muss ich dir wiedersprechen.
Laut Win32.hlp und MSDN hast du zwar recht, aber es führt bei mir immer zu bösen Abstürzen.
Wenn man hier in der API Datenbank schaut und im Internet, findet man immer meine Lösung mit zwei Parametern.
 
Viele Grüsse, Georg Hovenbitzer(Windows XP Pro, XProfan 11.2, Profan2Cpp 1.6a)
14.11.2005  
 




Sebastian
König
Hallo Georg,

ja, sorry - Du hast natürlich recht! Ich hatte die Doku wohl zu flüchtig gelesen und nicht realisert, dass die Funktion tatsächlich einen POINT (zusammengesetzt aus 2 Longs) und eben nicht die Adresse einer POINT-Struktur erwartet. Das gleiche gilt für ChildWindowFromPoint...

Nochmal sorry für die Verwirrung!

MfG

Sebastian
 
Windows XP, XProfan/Profan² 4.5 bis 11
Profan2Cpp-Homepage:  [...] 
Alte Profan²-Seite:  [...] 
14.11.2005  
 





PS: Ich finde das Smilie so G**L.
 
14.11.2005  
 



Antworten


Thementitel, max. 100 Zeichen.
 

Systemprofile:

Kein Systemprofil angelegt. [anlegen]

XProfan:

 Beitrag  Schrift  Smilies  ▼ 

Bitte anmelden um einen Beitrag zu verfassen.
 

Themenoptionen

4.013 Betrachtungen

Unbenanntvor 0 min.
Torben Nissen02.02.2013

Themeninformationen



Admins  |  AGB  |  Anwendungen  |  Autoren  |  Chat  |  Datenschutz  |  Download  |  Eingangshalle  |  Hilfe  |  Händlerportal  |  Impressum  |  Mart  |  Schnittstellen  |  SDK  |  Services  |  Spiele  |  Suche  |  Support

Ein Projekt aller XProfaner, die es gibt!


Mein XProfan
Private Nachrichten
Eigenes Ablageforum
Themen-Merkliste
Eigene Beiträge
Eigene Themen
Zwischenablage
Abmelden
 Deutsch English Français Español Italia
Übersetzungen

Datenschutz


Wir verwenden Cookies nur als Session-Cookies wegen der technischen Notwendigkeit und bei uns gibt es keine Cookies von Drittanbietern.

Wenn du hier auf unsere Webseite klickst oder navigierst, stimmst du unserer Erfassung von Informationen in unseren Cookies auf XProfan.Net zu.

Weitere Informationen zu unseren Cookies und dazu, wie du die Kontrolle darüber behältst, findest du in unserer nachfolgenden Datenschutzerklärung.


einverstandenDatenschutzerklärung
Ich möchte keinen Cookie