Aloha ich hab wiedermal ein problem. Und zwar möchte ich gerne eine ListView haben die EXAKT die des Explorer (Vista) immitiert. Bisher habe ich einen sehr gut funktionierenden Contextmenu hook und die ListView ähnelt schon sehr der des Explorers.
Das Problem: Die ListView weißt ein seltsames verhalten auf. Wenn ich TRANSPARENTSHADOWTEXT und TRANSPARENTBKGND nach DOUBLEBUFFER setze funktioniert die "Blaueselektion" nicht, aber wenn ich es mal schaffe das der Shadow hinter dem Text gezeichnet wird verhält sich das beim selektieren / deselektieren ganz eigenartig.
vielleicht hat sich damit ja schon jemand von euch beschäftigt? Ich jedenfalls bin an dem Punkt angekommen wo ich jetzt erstmal nicht mehr weiterkomme. HILFE!!
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19:
| private const int LVM_FIRST = 0x1000; private const int LVM_SETEXTENDEDLISTVIEWSTYLE = LVM_FIRST + 54; [DllImport("user32.dll", CharSet = CharSet.Auto)] private static extern IntPtr SendMessage(IntPtr hWnd, int msg, int wParam, int lParam); [DllImport("uxtheme", CharSet = CharSet.Unicode)] private extern static Int32 SetWindowTheme(IntPtr hWnd, String textSubAppName, String textSubIdList); protected override void InitLayout() { base.InitLayout();
SetWindowTheme(this.Handle, "explorer", null); SendMessage(this.Handle, LVM_SETEXTENDEDLISTVIEWSTYLE, 0, Win32.ComCtrlListView.ExtendedStyles.LVS_EX_TRANSPARENTBKGND); SendMessage(this.Handle, LVM_SETEXTENDEDLISTVIEWSTYLE, 0, Win32.ComCtrlListView.ExtendedStyles.LVS_EX_TRANSPARENTSHADOWTEXT); SendMessage(this.Handle, LVM_SETEXTENDEDLISTVIEWSTYLE, 0, Win32.ComCtrlListView.ExtendedStyles.LVS_EX_DOUBLEBUFFER); } |