2010-05-06 3 views
1

La configuration décrite avec le 2ème moniteur à gauche du primaire entraîne WM_NCHITTEST pour envoyer des valeurs négatives qui ne sont apparemment pas prises en charge selon this après.WM_NCHITTEST et moniteur secondaire à gauche du moniteur principal

J'ai un contrôle personnalisé écrit dans win32 qui est comme un contrôle de groupe. Il a une petite zone cliquable. Aucun événement MOUSE n'arrive à mon contrôle lorsque la fenêtre contenant le contrôle personnalisé se trouve sur un deuxième moniteur à gauche du moniteur principal. SPY ++ affiche les messages WM_NCHITTEST mais pas les messages de la souris. Lorsque la fenêtre est déplacée vers le moniteur principal ou que le moniteur secondaire est positionné à droite du primaire (tous les points sont positifs), tout fonctionne correctement. Voici comment WM_NCHITTEST est géré dans mon contrôle personnalisé. En général, j'en ai besoin pour retourner HTTRANSPARENT afin de ne pas obscurcir les autres contrôles placés à l'intérieur. Quelqu'un at-il des suggestions quelle traduction de coordination géniale je dois faire et quoi retourner en réponse à WM_NCHITTEST pour obtenir des messages de souris traduits et envoyés à mon contrôle dans le cas où il est sur un deuxième moniteur placé à gauche du moniteur principal?

case WM_NCHITTEST: 
    { 
     POINT Pt = {LOWORD(lP), HIWORD(lP)}; 
     int i; 
     ScreenToClient (hWnd, &Pt); 
     if (PtInRect (&rClickableArea, Pt)) 
     { 
      return(DefWindowProc(hWnd, Msg, wP, lP)); 
     } 
    } 
    lReturn = HTTRANSPARENT; 
    break; 

Répondre

1

Vous devez utiliser GET_X_LPARAM et macros GET_Y_LPARAM pour extraire les coordonnées de la souris. Ils renverront correctement les valeurs négatives, contrairement à LOWORD et al. qui renvoient des valeurs non signées.

POINT Pt = { GET_X_LPARAM(lP), GET_Y_LPARAM(lP) }; 

Le reste du code devrait fonctionner correctement.

+0

Génial. J'aime ces solutions faciles! Merci! – AlanKley