WParam lParam trouver les Button Shift X Y

Résolu
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 - 8 sept. 2005 à 13:21
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 - 12 sept. 2005 à 14:38
bonjour à tous.

voilà, j'ai un petit souci [VB6]
j'expliquerais plus si j'ai des suite, le code est déjà existant.
le problème est simple. j'ai une fonction en Classe (Dll ActiveX)
CallBackWindowProc(ByVal iMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long

j'aimerais récupérer le Button Shift X Y selon mon iMsg, à savoir, pour le moment du moins, sur les évènements HOVER LEAVE MOUSEWHEEL

voici comment je "formate"

zKey = wParam And 65535
zDelta = wParam / 65536
xPos = lParam And 65535
yPos = lParam / 65536

le problème est que pour les Shift, je n'arrive pas à récupérer le Alt.

pareil, le MiddleMouse vaut 16. j'ai beau renvoyer l'évènement à 4, je ne sais pas si c'est ma conversion qui est mauvaise.

pour les X Y, il me renvoie la position par rapport à l'écran, et non à l'objet attaché. faut-il regarder ou se trouve l'objet par rapport à l'écran? ou bien LoWord ou HiWord quelque part.... (et si oui, comment)

enfin, pour MouseWheel, le zKey est positif ou négatif selon Up ou Down. est-ce bien çà à prendre en compte?

peut-être ai-je mal cherché, mais c'est pas faute d'y avoir passé du temps...
merci

PCPT

7 réponses

BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
8 sept. 2005 à 14:13
ClientToScreen(mhWnd, PtMouse)
tu ne remplis pas ce tu passes avant l'appel.
Remplis les champs de PtMouse.

ciao...
BruNews, MVP VC++
3
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
8 sept. 2005 à 13:47
API ScreenToClient pour convertir en coordonnées de fenetre.

ciao...
BruNews, MVP VC++
0
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
8 sept. 2005 à 13:59
salut,

oui, je l'utilise déjà (j'ai fait pas mal de tests) mais les résultats me semblent éronnés.


Private Declare Function ClientToScreen Lib "user32" ByVal hWnd As Long, lpPoint As POINTAPI) As Long
Private Declare Function ScreenToClient Lib "user32" ByVal hWnd As Long, lpPoint As POINTAPI) As Long
Private Sub OverOutRaiser(OOE As OutOverConst, Optional Xs As Single -50, Optional Ys As Single -50)
Dim zKey As Long, zDelta As Long, xPos As Single, yPos As Single
Dim aa As Integer, bb As Integer
Dim PtMouse As MOD_API.POINTAPI

'mwparam et mlparam sont réinitialisés dans le CallBack
zKey = mwParam And 65535
zDelta = mwParam / 65536
xPos = mlParam And 65535
yPos = mlParam / 65536

aa = Int(zKey)
bb = Int(zDelta)

If Xs = -50 Then 'c'est en Hover-Leave classic
Call ClientToScreen(mhWnd, PtMouse)
RaiseEvent OutOverTM(OOE, aa, bb, CSng(PtMouse.X), CSng(PtMouse.Y))
Else 'fourni par le timer
RaiseEvent OutOverTM(OOE, aa, bb, Xs, Ys)
End If
End Sub


<SMALL> Coloration syntaxique automatique [AFCK]</SMALL>

et quelle différence entre ClientToScreen et ScreenToClient ?
et le calculer ne va pas plus vite? quitte à ensuite déduite top et left...

PCPT
0
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
8 sept. 2005 à 14:32
çà semble + correct.
j'ai tout de même parfois X ou Y en négatif...


If Xs = -50 Then 'c'est en Hover-Leave classic
'Dim ParentHwnd As Long
Call MOD_API.GetCursorPos(PtMouse)
'ParentHwnd = MOD_API.WindowFromPoint(PtMouse.X, PtMouse.Y)
Call ScreenToClient(mhWnd, PtMouse)

RaiseEvent OutOverTM(OOE, aa, bb, CSng(PtMouse.X), CSng(PtMouse.Y))
'reste inchangé


<SMALL> Coloration syntaxique automatique [AFCK]</SMALL>


il faut encore multiplier X et Y par Screen.Twips..., non?

ps : infos aux lecteur, ClientToScreen renvoie les coordonnées par rapport à l'écran et non à la fenêtre...

et une idée pour mes autres questions?
merci déjà pour ce point, je vais regarder pour le problème de négatif (peut-être la taille de la bordure)

PCPT
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
8 sept. 2005 à 14:49
API travaille toujours en pixels, jamais en twips.
Tu peux régler vb en twips je crois ? sinon il te faut convertir.

ClientToScreen et ScreenToClient convertissent les x et y de POINT passé en param selon la position de la fenetre (hwnd) du 1er param.

ciao...
BruNews, MVP VC++
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
8 sept. 2005 à 14:50
Régler vb en mode pixels voulais-je dire.

ciao...
BruNews, MVP VC++
0
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
12 sept. 2005 à 14:38
la suite à venir pour Button & Shift sur Topic relance

Merci bcp!!
PCPT
0
Rejoignez-nous