2013-04-01 8 views
15

W widoku listy Eksploratora Windows w systemie Windows 7 (what allegedly is not list view at all) w widoku Szczegóły, możesz rozpocząć zaznaczanie zaznaczenia w pierwszej kolumnie (Nazwa). Musisz tylko zacząć od rzeczywistej nazwy.Zezwalaj na wybór w widoku listy w stylu Eksploratora, aby rozpocząć w pierwszej kolumnie

Windows 7's Windows Explorer Selection Marquee

To samo jest prawdą dla domyślnego stylu widoku listy kontroli w widoku szczegółów.

Ale jeśli ustawisz kontrolkę widoku listy w stylu Eksploratora (używając SetWindowTheme), co powinno naśladować Eksploratora Windows, to już nie działa. Możesz rozpocząć zaznaczanie tylko w drugiej i późniejszych kolumnach.

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

Czy istnieje sposób na widok listy naśladujący styl zaznaczenia Eksploratora?

Przypuszczam, że nie ma ustawień umożliwiających takie zachowanie, a to musiałoby być zakodowane. Podobnie jak obsługa myszy i selekcja wyzwalacza. Ale nie mam pojęcia, jak to zrobić.

Dzięki.

Ntb, używam C++ Builder, ale powinien to być problem wyłącznie z Win32. Przetestowałem to również z WinForms (stąd próbka C# powyżej).

+0

Tylko jedna z wielu rzeczy, które pozostały nieudokumentowane w powłoce, ponieważ wszyscy zapomnieli o decyzji o wydaniu zgody ... –

+0

@JonathanPotter Dlaczego uważasz, że MS powinno być zmuszone do udokumentowania 'DirectUIHwnd' i uczynienia go kontrolą publiczną? –

+0

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

Odpowiedz

8

W rzeczywistości istnieje sposób naśladowania zachowania selektora Explorer. Wymaga dużo dodatkowej pracy deklaratywnej, ale jest to możliwe.

Musisz uzyskać nieudokumentowany interfejs IListView za pośrednictwem nieudokumentowanego komunikatu LVM_QUERYINTERFACE (zwróć uwagę, że deklaracja interfejsu i identyfikatory GUID są różne w systemach Windows Vista i Windows 7+). Szczegóły dotyczące stałych i deklaracji można znaleźć tutaj:

Po nabyciu interfejsu wystarczy tylko wywołać metodę SetSelectionFlags(1, 1). Voila, skończyłeś.

+0

Dzięki! Gdzie znalazłeś wartości 'SetSelectionFlags'? –

+0

Udało mi się to przetestować w systemach Windows 7, 8.1 i 10. Nie działa w systemie Vista (tak, użyłem interfejsu GUID/interfejsu specyficznego dla systemu Vista); Mogę pobrać interfejs specyficzny dla Visty, ale 'SetSelectionFlags' nie ma żadnego efektu. Nie widziałem efektu ubocznego wysyłania wiadomości 'LVM_QUERYINTERFACE' do widoku listy w systemie Windows XP. –

+0

Powodzenia w przyszłych wersjach systemu Windows –

11

Czy istnieje sposób, aby wyświetlić listę naśladować styl wyboru Explorer?

Nie, SysListView32 w explorer motyw nie zachowuje się w ten sposób. Sterowanie używane przez nowoczesny Explorer jest w rzeczywistości DirectUIHwnd. I nie jesteś w stanie użyć jednego z nich.

Jedynym sposobem uzyskania zachowania DirectUIHwnd jest samodzielne zakodowanie. Oczekuję, że da się to zrobić, ale spodziewam się, że będzie to bardzo trudne do osiągnięcia.

+0

Dzięki. Byłam prawie pewna, że ​​nie mogę niczego ustawić, żeby zachowywała się tak, jak chcę. Spodziewam się, że to musi być zakodowane. Po prostu nie wiem jak. Edytował pytanie, aby było to jednoznaczne. –

+4

Cóż, odpowiedziałem na oryginalne pytanie. Oczywiście możliwe jest przeprowadzenie takiej kontroli. Odkrywca jest tego dowodem. Czy to możliwe do przeszczepienia na 'SysListView32' to inna sprawa. Jestem sceptyczny. –

+0

Bounty idzie do ciebie, bo ja, niestety, nie otrzymałem lepszej odpowiedzi :) Dzięki. –

Powiązane problemy