2008-09-21 29 views
14

Tôi đã tạo một bảng điều khiển và đặt nó để lấp đầy màn hình, bây giờ tôi có thể thấy các cửa sổ bên dưới nó, nhưng tôi muốn nó được nhấp qua, có nghĩa là họ có thể nhấp vào một tập tin hoặc nhìn thấy một đầu công cụ của một đối tượng khác.Nhấp qua minh bạch cho Visual C# Window Forms?

RE: Điều này có thể quá rõ ràng, nhưng bạn đã cố gắng gửi bảng điều khiển lên lưng bằng cách nhấp chuột phải và chọn "Gửi lại"?

Ý tôi là như máy tính để bàn hoặc firefox, không phải thứ gì đó trong dự án của tôi.

Trả lời

21

Tạo biểu mẫu cấp cao nhất trong suốt rất dễ dàng. Chỉ cần làm cho nó điền vào màn hình, hoặc khu vực cần thiết, và xác định nó để có một màu TransparenyKey và BackColor của cùng một giá trị.

Làm cho nó bỏ qua chuột là đủ đơn giản, bạn chỉ cần ghi đè lên WndProc và nói với WM_HITTEST rằng tất cả các vị trí chuột đều được coi là minh bạch. Do đó khiến chuột tương tác với bất kỳ thứ gì xảy ra bên dưới cửa sổ. Một cái gì đó như thế này ...

protected override void WndProc(ref Message m) 
    { 
     if (m.Msg == (int)WM_NCHITTEST) 
      m.Result = (IntPtr)HTTRANSPARENT; 
     else 
      base.WndProc(ref m); 
    } 
+1

Nơi đặt mã đó? Khi tôi đặt nó dưới InitializeCoponets nó không hoạt động. Tôi thậm chí không được gọi một lần. – Hooch

+0

Đặt ở lớp biểu mẫu. Nhân tiện, WM_NCHITTEST = 0x84 và HTTRANSPARENT = -1. Nó hoạt động !!! : D – Pedro77

+1

Điều này không có tác dụng đối với tôi trong Win8 bằng cách sử dụng cửa sổ [lớp] (http://msdn.microsoft.com/en-us/library/ms997507.aspx): các trình duyệt sẽ đi qua, nhưng các lần nhấp sẽ kích hoạt cửa sổ của tôi thay vì đi qua. Thay vào đó, những gì đã làm là [đặt WS_EX_TRANSPARENT] (http://stackoverflow.com/a/2798294/33080). –

Các vấn đề liên quan