Tôi không nói về tính năng kính vista, tôi đã biết cách thực hiện điều đó. Tính năng mà tôi đang nói đến là thêm các điều khiển vào thanh tiêu đề, như văn phòng 2007 với logo và thanh công cụ.Ứng dụng C# của Chrome Style?
Trả lời
Bạn cần thực hiện một số tương tác Win32 để đạt được hiệu ứng đó. Tùy thuộc vào việc bạn đang sử dụng Winforms hay WPF, cách bạn móc để xử lý thông điệp khác nhau (Tôi không nhớ Winforms, vì vậy tôi sẽ cung cấp tất cả các ví dụ cho WPF). Nhưng trong cả hai trường hợp, bạn cần phải:
Ngăn chặn việc tạo cửa sổ và sửa đổi kiểu cửa sổ và kiểu mở rộng. Trong WPF, bạn cần kế thừa từ
HwndSource
và sửa đổiHwndSourceParameters
để đạt được điều này. Bạn cần WS_OVERLAPPEDWINDOW, WS_CLIPSIBLINGS và WS_VISIBLE cho kiểu dáng thông thường và WS_EX_WINDOWEDGE và WS_EX_APPWINDOW kiểu mở rộng.Thêm trình xử lý tin nhắn thông qua các thông số HwndSource HwndSourceHook.
Trong proc nhắn thêm thông qua việc móc trong bước hai, bạn cần phải xử lý nhiều tin nhắn:
WM_NCACTIVATE
- để thay đổi bức tranh của danh hiệu khi ứng dụng được kích hoạt hay khôngWM_NCCALCSIZE
- để quay lại hệ điều hành mà bạn không có khu vực không phải khách hàngWM_NCPAINT
- nói chung bạn cần phải khai báo cửa sổ trực tiếp ở đây, WPF sẽ chăm sóc bức tranh thực tế)WM_NCHITTEST
- để xử lý việc di chuyển cửa sổ, thu nhỏ và tối đa hóa.
Khi bạn thực hiện ở trên, khu vực khách hàng của bạn, nơi WPF sẽ vẽ cây hình ảnh của bạn sẽ kéo dài toàn bộ khu vực của cửa sổ. Bạn sẽ cần phải thêm hình ảnh "không liên quan" để ứng dụng của bạn trông giống như một ứng dụng thông thường cho người dùng.
Bạn có thể cần nhiều thông điệp hơn:
WM_THEMECHANGED
nếu bạn muốn thay đổi "không-client" bức tranh khu vực của bạn để phù hợp với chủ đề OSWM_DWMCOMPOSITIONCHANGED
nếu bạn muốn mở rộng kính và có được tiêu chuẩn sơn NC-thủy tinh khi kính được kích hoạt và chuyển sang logic tùy chỉnh của bạn khi thủy tinh không được.
Bạn có thể muốn nhìn vào các API Theme Win32 nếu bạn muốn đi lấy tài sản Win32 tiêu chuẩn cho biên giới, chú thích, đóng, mininmize và phát huy tối đa các nút để sử dụng trong khu vực 'phi khách hàng" của mình.
Nếu bạn muốn mở rộng Glass vào cửa sổ, bạn có thể xem xét:
DwmExtendFrameIntoClientArea
- để có được kính tiêu chuẩn NC-khu vựcDwmDefWindowProc
- để có được người quản lý máy tính để bàn để vẽ Glass và các điều khiển NC tiêu chuẩnDwmIsCompositionEnabled
- để xác định xem Glass có được bật hay không; bạn chỉ có thể sử dụng hai API trên khi Glass được bật. Nếu Glass không được kích hoạt, bạn cần tự vẽ bản vẽ của khu vực NC.
Bạn có thể tìm đúng C# định nghĩa của tất cả các bài viết, phong cách và tương ứng với Win32 API bạn cần trên P/Invoke.
Bạn cũng có thể đạt được hiệu ứng tương tự bằng cách sử dụng cửa sổ WPF chuẩn với WindowStyle=none
. Tuy nhiên, sẽ có một số khác biệt giữa hành vi của máy tính để bàn đối với ứng dụng của bạn và các ứng dụng khác; rõ ràng nhất trong số họ là bạn sẽ không thể xếp chồng hoặc lát cửa sổ của mình bằng cách nhấp chuột phải vào thanh tác vụ.
Bạn cũng có thể xem xét một số thành phần của bên thứ ba cho phép một số chức năng này. Tôi đã không sử dụng bất kỳ (như bạn có thể thấy, tôi không sợ Win32 interop :-)), vì vậy tôi không thể khuyên bạn nên bất kỳ cụ thể.
Tôi đã sử dụng bộ điều khiển DotNetBar với thành công tốt.
Như Franci đề cập, những gì bạn muốn là DwmExtendFrameIntoClientArea. Dưới đây là một ví dụ từ Codeproject cho thấy làm thế nào để làm điều đó.
http://www.codeproject.com/KB/dialog/AeroNonClientAreaButtons.aspx
Lưu ý rằng khi Glass bị tắt, ví dụ dưới TS hoặc khi người dùng chuyển sang Vista cơ bản, DwmExtendFrameIntoClientAre sẽ không hoạt động. –
Joe Castro, một nhà phát triển nhóm sản phẩm WPF, có một dự án gallery đang MSDN gọi là "WPF Chrome" có thể được dùng để tạo ra một văn phòng 2007-như giao diện người dùng (ví dụ: điều khiển span cả khách hàng và các khu vực không phải của khách hàng của cửa sổ).
Tìm tại đây: http://code.msdn.microsoft.com/chrome
tuyệt vời ~~~~~~~~~~~~~~! –
- 1. C++ sử dụng const_cast thay vì C-style phôi
- 2. Làm cách nào để kéo và thả trong WPF trong ứng dụng "Metro Style" của tôi?
- 3. Đặt lại Style Style với Twitter Bootstrap
- 4. C# - Gửi tin nhắn tới Google Chrome từ ứng dụng C#
- 5. Mở ứng dụng Chrome trong tab
- 6. Lập hồ sơ ứng dụng Chrome
- 7. Truy cập cookie từ ứng dụng chrome
- 8. Không thể đọc thuộc tính 'style' của null
- 9. BoundField style
- 10. Kéo 'n' Thả tệp vào Ứng dụng gói Chrome?
- 11. Cách gửi tin nhắn TỪ ứng dụng gốc tới tiện ích của Chrome?
- 12. DynamicResource cho Style BasedOn
- 13. JAX-WS vs SAAJ Style, sử dụng
- 14. Ứng dụng C# có theo dõi thời gian chạy của ứng dụng C# không?
- 15. C-Style strings to std :: làm rõ chuỗi chuyển đổi
- 16. Tải tệp html cục bộ trong ứng dụng WebView Metro Style
- 17. C++ chuỗi phân tích cú pháp (python style)
- 18. OpenMP và STL-style cho
- 19. Multiassignment trong VB như trong ngôn ngữ C-Style
- 20. Phím tắt ứng dụng Chrome/Trình cài đặt Mozilla Prism
- 21. Tôi có thể xóa ứng dụng web trong Chrome không?
- 22. Làm cách nào để Chrome tải "ứng dụng cửa hàng"?
- 23. Ứng dụng XBAP, các ứng dụng này có hoạt động trong Google Chrome không?
- 24. HTML Anchor, Disable Style
- 25. Cách tạo ứng dụng Chrome trả tiền với PayPal?
- 26. Máy chủ Websocket trong ứng dụng đóng gói chrome
- 27. Chrome OS có hỗ trợ các ứng dụng Java không?
- 28. Ghi đè ToggleButton Style
- 29. Qt style sheets lỗi?
- 30. Xóa thanh Tiêu đề của ứng dụng bên ngoài bằng cách sử dụng C#
Không thực sự. Tôi đã lên kế hoạch viết một cuốn sách, nhưng tôi chưa bao giờ hiểu, điều gì xảy ra với đứa bé 5 tháng tuổi trong nhà và không biết ... :-) –