2010-05-06 55 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