2009-05-12 28 views
5

Tôi muốn tạo ra các cửa sổ pop-up như thế này:Aero Glass Borders trên Popup Windows trong C#

http://i44.tinypic.com/345bklu.jpg

alt text http://i44.tinypic.com/345bklu.jpg

Trong ứng dụng của tôi sử dụng C#. Tôi đã nhìn vào NativeWindow nhưng tôi không chắc chắn nếu điều này là đúng cách để làm điều đó. Làm thế nào tôi có thể thực hiện điều này. Tôi muốn cửa sổ hoạt động chính xác như điều khiển âm lượng hoặc cửa sổ "kết nối với" trong Windows 7.

Chỉnh sửa: Tôi quên đề cập đến cửa sổ có kích thước cố định.

Trả lời

2

tôi đã có thể thực hiện điều này:

if (m.Msg == 0x84 /* WM_NCHITTEST */) { 
    m.Result = (IntPtr)1; 
    return; 
} 
base.WndProc(ref m); 
+0

cảm ơn - đã sửa lỗi bằng con trỏ chờ hiển thị – zsalzbank

2

Trong CreateParams của bạn chỉ định WS_POPUP và WS_THICKFRAME.

4

Sử dụng WinForms, tạo ra một hình thức và thiết lập như sau:

Text = ""; 
FormBorderStyle = Sizable; 
ControlBox = false; 
MaximizeBox = false; 
MinimizeBox = false; 
ShowIcon = false; 

Edit:

này đòi hỏi các cửa sổ được khá lớn, nhưng bạn có thể lừa gạt ở đó một chút. Đặt MinimumSize và MaximumSize thành kích thước mong muốn. Điều này sẽ ngăn người dùng thay đổi kích thước.

Theo Jeff đề nghị, bạn cũng có thể làm điều này trong CreateParams:

protected override CreateParams CreateParams 
{ 
    get 
    { 
     CreateParams cp = base.CreateParams; 
     unchecked 
     { 
      cp.Style |= (int)0x80000000; // WS_POPUP 
      cp.Style |= 0x40000;   // WS_THICKFRAME 
     } 
     return cp; 
    } 
} 

Trong cả hai trường hợp, tuy nhiên, bạn vẫn sẽ nhận được một con trỏ kích thước khi bạn di chuột qua các cạnh. Tôi không chắc chắn làm thế nào để ngăn chặn điều đó xảy ra.

+0

Bạn có nghĩ rằng có thể chụp một số loại thông báo cửa sổ để tắt các con trỏ không? Cảm ơn – zsalzbank

+0

@codethis: Tôi nhìn xung quanh một chút và không tìm thấy gì cả. Có ràng buộc phải là một cách, mặc dù. –

+0

Tôi đã có thể loại bỏ con trỏ thay đổi kích thước bằng cách hủy WM_SETCURSOR. void ghi đè được bảo vệ WndProc (thông báo ref m) { nếu (m.Msg == 0x20) { m.Result = (IntPtr) 1; trả lại; } base.WndProc (ref m); } Làm như vậy nhưng để lại một hiệu ứng phụ lạ - lần đầu tiên bạn di chuột qua biên giới, con trỏ chờ xuất hiện. Sau đó, khi bạn di chuyển nó vào khu vực khách hàng nó hoạt động chính xác. Không chắc chắn cách fax ... – zsalzbank

0

Để ngăn chặn con trỏ kích thước so với biên giới xử lý WM_NCHITTEST và khi qua biên giới trở HTBORDER.

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