2014-02-14 40 views
1

我正在尋找一種方法來檢測雙擊窗口大小的抓地力,但似乎甚至沒有一個單擊事件的大小抓地力​​,或任何事件有關它。猜測抓握區域的大小以及用戶是否真正點擊所需區域是一項不必要的困難工作。但是,除了默認的winform屬性之外,還有其他一些方法可以檢測光標在窗體的大小抓取上是否爲 ?如何檢測大小握雙擊事件?

是否有一種簡單的方法可以知道用戶何時雙擊表單的大小夾點?

+0

尺寸握是未在客戶機區域和窗口形式除了控制鍵鼠標輸入不提供事件。所以,你無法得到任何形式的抓握事件。是的,你可以通過鼠標鉤子使用一些Windows API來做到這一點。但是,您必須確定您的鼠標是否點擊抓地力。因爲鼠標鉤將執行整個屏幕而不是特定的對象。 – Shell

+0

那麼,Windows以某種方式知道你什麼時候點擊並拖動那個手柄,所以有一些方法。 – user1306322

+0

Windows右鍵單擊標題欄時也會提供上下文菜單。可以訪問它嗎?可能有一些方法可以實現。但是,沒有Windows API,我認爲這是不可能的。 – Shell

回答

0

您需要:在窗體的非客戶區

  1. 設置的方式來接收鼠標雙擊事件。
  2. 定義您關心的事件對應的hitbox。
  3. 當它在你的hitbox中時對它進行響應。

重寫WndProc形式的方法來實現這一點:

protected override void WndProc(ref Message m) 
    { 
     const Int32 WM_NCLBUTTONDBLCLK = 0xA3; 
     if (m.Msg == WM_NCLBUTTONDBLCLK) 
     { 
      //This is a 16x16 region...define the bounds you want... 
      Rectangle hitbox = new Rectangle(this.Right - 16, this.Bottom - 16, 16, 16); 
      Point pos = new Point(m.LParam.ToInt32() & 0xffff, m.LParam.ToInt32() >> 16); 
      if (hitbox.Contains(pos)) 
       MessageBox.Show("got it"); //react however you like 
     } 
     base.WndProc(ref m); 
    }