2010-05-06 53 views
1

主显示器左边第二个显示器所描述的设置会导致WM_NCHITTEST发送负值,根据this显然不支持该值。WM_NCHITTEST和主显示器左边的辅助显示器

我有一个用win32编写的自定义控件,就像一个组控件。它有一个小的可点击区域。当包含自定义控件的窗口位于主监视器左侧的第二个监视器上时,没有MOUSE事件发生在我的控制之下。 SPY ++显示WM_NCHITTEST消息,但没有鼠标消息。当窗口移动到主监视器或辅助监视器位于主区右侧(所有点均为正)时,一切正常。以下是WM_NCHITTEST在我的自定义控件中的处理方式。一般来说,我需要它返回HTTRANSPARENT以避免掩盖其中的其他控件。任何人都有什么建议什么时髦的坐标转换我需要做什么和回应什么回应WM_NCHITTEST让鼠标消息翻译并发送到我的控制在它的情况下,它是在第二个监视器放置在主监视器的左侧?

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; 

回答

1

您必须使用GET_X_LPARAM和GET_Y_LPARAM宏来提取鼠标坐标。与LOWORD等人不同,他们将正确地返回负值。它返回无符号值。

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

其余的代码应该没问题。

+0

太棒了。我喜欢那些简单的修复!谢谢! – AlanKley 2010-05-06 16:53:51