2013-04-01 29 views
15

Trong dạng xem danh sách Windows Explorer (what allegedly is not list view at all) trong dạng xem chi tiết, bạn có thể bắt đầu lựa chọn trong cột đầu tiên (tên). Bạn chỉ cần bắt đầu bên ngoài tên thật.Cho phép lựa chọn trong dạng xem danh sách kiểu Explorer để bắt đầu trong cột đầu tiên

Windows 7's Windows Explorer Selection Marquee

Điều này cũng đúng đối với mặc định theo kiểu kiểm soát xem danh sách trong xem chi tiết.

Nhưng nếu bạn đặt kiểm soát chế độ xem danh sách theo kiểu Explorer (sử dụng SetWindowTheme), những gì sẽ bắt chước Windows Explorer, điều này không hoạt động nữa. Bạn có thể bắt đầu lựa chọn trong cột thứ hai và sau đó.

SetWindowTheme(listView1.Handle, "explorer", null); 

Có cách nào để chế độ xem danh sách bắt chước kiểu lựa chọn Explorer không?

Tôi cho rằng không có cài đặt nào để bật hành vi như vậy và điều này sẽ phải được mã hóa. Giống như xử lý chuột xuống và kích hoạt lựa chọn. Nhưng tôi không có ý tưởng làm thế nào để làm điều đó.

Cảm ơn.

Ntb, tôi đang sử dụng C++ Builder, nhưng điều này hoàn toàn là vấn đề Win32. Tôi đã thử nghiệm điều này với WinForms quá (do đó mẫu C# ở trên).

+0

Chỉ cần một trong nhiều thứ còn lại không có giấy tờ trong vỏ vì mọi người quên về nghị định chấp thuận ... –

+0

@JonathanPotter Tại sao bạn cảm thấy rằng MS nên bắt buộc phải ghi lại tài liệu 'DirectUIHwnd' và kiểm soát công khai? –

+0

@David Heffernan: http://en.wikipedia.org/wiki/United_States_v._Microsoft –

Trả lời

8

Thực tế có một cách để bắt chước hành vi lựa chọn của Explorer. Nó đòi hỏi rất nhiều công việc khai báo bổ sung, nhưng có thể.

Bạn cần nhận giao diện IListView không được cấp giấy phép qua thông báo LVM_QUERYINTERFACE không có giấy tờ (lưu ý rằng khai báo giao diện và GUID khác với Windows Vista và Windows 7+). Thông tin chi tiết về các hằng số và tờ khai có thể được tìm thấy ở đây:

Sau khi có được giao diện tất cả những gì bạn cần chỉ cần gọi đến phương thức SetSelectionFlags(1, 1). Thì đấy, bạn đã xong.

+0

Cảm ơn! Bạn đã tìm thấy các giá trị cho 'SetSelectionFlags' ở đâu? –

+0

Tôi đã thử nghiệm thành công tính năng này trên Windows 7, 8.1 và 10. Không hoạt động trên Vista (có, tôi đã sử dụng GUID/giao diện dành riêng cho Vista); Tôi có thể lấy lại giao diện cụ thể của Vista, nhưng 'SetSelectionFlags' không có hiệu lực. Tôi đã không gặp phải tác dụng phụ khi gửi thông điệp 'LVM_QUERYINTERFACE' đến chế độ xem danh sách trên Windows XP. –

+0

Chúc may mắn với điều này trên các phiên bản tương lai của Windows –

11

Có cách nào để làm cho chế độ xem danh sách bắt chước kiểu lựa chọn Explorer không?

Không, SysListView32 trong chủ đề explorer không hoạt động theo cách đó. Kiểm soát được sử dụng bởi trình khám phá hiện đại thực sự là DirectUIHwnd. Và bạn không thể sử dụng một trong số chúng.

Cách duy nhất để có được hành vi của DirectUIHwnd là tự viết mã cho chính mình. Tôi hy vọng rằng có thể làm nhưng tôi cũng hy vọng nó sẽ rất khó để đạt được.

+0

Cảm ơn. Tôi khá chắc chắn rằng tôi không thể đặt bất cứ điều gì để làm cho nó hoạt động như tôi muốn. Tôi hy vọng điều này đã được mã hóa. Tôi chỉ không biết làm thế nào. Đã chỉnh sửa câu hỏi để làm rõ. –

+4

Vâng, tôi đã trả lời câu hỏi gốc. Rõ ràng nó có thể thực hiện một điều khiển như vậy. Explorer là bằng chứng về điều đó. Cho dù nó có thể xử lý để bạn ghép nó vào 'SysListView32' là một vấn đề khác. Tôi hoài nghi. –

+0

Tiền thưởng đến với bạn, như tôi, thật không may, đã không nhận được bất kỳ câu trả lời tốt hơn :) Cảm ơn. –