Spy++ cho chúng tôi biết đó thực sự là hai riêng biệt STATIC
controls (tương tự như Label
trong WinForms).
Đầu tiên chỉ đơn giản là điều khiển văn bản tĩnh thông thường có nội dung là "Trang chủ".
Cái thứ hai có bộ SS_ETCHEDHORZ
style, làm cho nó vẽ thành đường 3D. Thật không may, khả năng thiết lập phong cách này không phải là tiếp xúc với chúng tôi từ bên trong WinForms.
Như bạn lưu ý trong câu hỏi, có một số hacks/cách giải quyết đó cho phép chúng tôi để đạt được một cái nhìn tương tự, như theo chiều dọc nén một điều khiển GroupBox
, hoặc trọng phương pháp OnPaint
của một điều khiển Label
và sử dụng lớp ControlPaint
để vẽ đường viền 3D. Họ làm việc, nhưng tôi chưa bao giờ thích chúng.
Nhưng bạn có thể thực sự tự thiết lập kiểu SS_ETCHEDHORZ
để bạn có thể sao chép chính xác giao diện người dùng gốc. Đây là một lớp nhỏ thực hiện chính xác điều đó. Thêm nó vào dự án của bạn, biên dịch, và bạn sẽ thấy một điều khiển mới xuất hiện trong hộp công cụ của bạn được gọi là "HorizontalRule". Sử dụng nó giống như bạn sẽ kiểm soát bất kỳ khác!
public class HorizontalRule : Control
{
private const int FixedHeight = 2;
private const int WS_CHILD = 0x40000000;
private const int WS_VISIBLE = 0x10000000;
private const int SS_ETCHEDHORZ = 0x00000010;
private const int SS_ETCHEDVERT = 0x00000011;
protected override CreateParams CreateParams
{
get
{
CreateParams cp = base.CreateParams;
cp.ClassName = "STATIC";
cp.Style = WS_CHILD | SS_ETCHEDHORZ;
if (this.Visible)
{
cp.Style |= WS_VISIBLE;
}
return cp;
}
}
protected override void SetBoundsCore(int x, int y, int width, int height, BoundsSpecified specified)
{
height = FixedHeight;
base.SetBoundsCore(x, y, width, height, specified);
}
}
Bạn cũng có thể tìm thêm thông tin chi tiết và mã mẫu bổ sung here on CodeProject.
Nguồn
2011-02-04 11:58:00
Sử dụng hình ảnh sẽ là vấn đề nếu kiểu điều khiển thay đổi trong phiên bản Windows sau này. Kiểm soát của bạn sẽ vẫn có kiểu cũ. –
Về mặt kỹ thuật, đó là sự thật, nhưng nếu nó chỉ là một dòng mỏng đơn giản thì không có nhiều "phong cách" với nó để nó không thành vấn đề. Dòng của tôi luôn được hiển thị độc đáo trong XP, Vista và Windows 7 cũng với các chủ đề khác nhau. – Peladao
Đó là * rất có thể là một phiên bản tương lai của Windows thay đổi đáng kể phong cách của "dòng mỏng đơn giản" đó. Lưu ý có bao nhiêu hộp nhóm đã thay đổi từ chủ đề "Cổ điển" sang Luna trong Windows XP, và sau đó lại trong Aero trong Windows Vista. (Một lý do khác khiến việc sử dụng hộp nhóm sẽ không hoạt động để sao chép ví dụ trong câu hỏi ban đầu.) –