OSDN Git Service

AppliStation-GUI,ListViewのユーザエクスペリエンスの向上。
authorttp <ttp@users.sourceforge.jp>
Tue, 26 Aug 2008 12:06:58 +0000 (12:06 +0000)
committerttp <ttp@users.sourceforge.jp>
Tue, 26 Aug 2008 12:06:58 +0000 (12:06 +0000)
Vistaで動いているときに、選択されたアイテムの部分の背景にグラデーションがかかった感じになる、Vista以降でのエクスプローラの見た目をListViewに反映させるようにした。

git-svn-id: http://localhost/svn/AppliStation/trunk@957 34ed2c89-c49f-4a4b-abdb-c318350108cf

AppliStation/AppliStation.Util/NativeMethods.cs
AppliStation/InstallationConfirmForm.cs
AppliStation/PackageListViewForm.cs

index 5cdd40a..b56ce38 100644 (file)
@@ -16,7 +16,7 @@ namespace AppliStation.Util
                {\r
                }\r
                \r
-               \r
+\r
                /// <summary>\r
                /// WindowsVista向け、プログレスバーステータス(色)を設定する\r
                /// </summary>\r
@@ -103,6 +103,44 @@ namespace AppliStation.Util
                \r
                #endregion\r
                \r
+               #region ListView関連\r
+               \r
+               #region 選択の半透明(コメント)\r
+               /*\r
+               /// <summary>\r
+               /// マウスでの選択に半透明ツールを採用する\r
+               /// </summary>\r
+               /// <param name="listView">対象のリストビュー</param>\r
+               public static void ListView_EnableDoubleBuffer(ListView listView)\r
+               {\r
+                       try {\r
+                               // SendMessage(listView.Handle, LVM_SETEXTENDEDLISTVIEWSTYLE, LVS_EX_DOUBLEBUFFER, LVS_EX_DOUBLEBUFFER);\r
+                               SendMessage(listView.Handle, 0x1036, 0x00010000, 0x00010000);\r
+                       } catch (Exception) {\r
+                       }\r
+               }\r
+               */\r
+               #endregion\r
+               \r
+               /// <summary>\r
+               /// 選択されたアイテムの部分の背景にグラデーションがかかった感じになる、\r
+               /// Vista以降でのエクスプローラの見た目をListViewに反映させる。\r
+               /// \r
+               /// なお、Vista未満のバージョンでは何もしない。\r
+               /// </summary>\r
+               /// <param name="listView">対象のListView</param>\r
+               public static void ListView_EnableVistaExplorerTheme(ListView listView)\r
+               {\r
+                       // Vista未満はなにもしない\r
+                       OperatingSystem os = Environment.OSVersion;\r
+                       if (os.Platform != PlatformID.Win32NT || os.Version.Major < 6) return;\r
+                       \r
+                       try {\r
+                               SetWindowTheme(listView.Handle, "explorer", null);\r
+                       } catch (Exception) {\r
+                       }\r
+               }\r
+               \r
                #region ColumnHeaderのソートの三角印用\r
                \r
                [StructLayout(LayoutKind.Sequential, CharSet=CharSet.Auto)]\r
@@ -163,6 +201,8 @@ namespace AppliStation.Util
                \r
                #endregion\r
                \r
+               #endregion\r
+               \r
                #region EnableWindow(コメントアウト)\r
 //             /// <summary>\r
 //             /// 指定されたコントロール(ウィンドウ)への、\r
@@ -197,5 +237,8 @@ namespace AppliStation.Util
                \r
                [DllImport("user32.dll", CharSet=CharSet.Auto)]\r
                internal static extern IntPtr SendMessage( IntPtr hWnd, UInt32 Msg, int wParam, ref HD_ITEM lParam);\r
+\r
+               [DllImport("uxtheme.dll", ExactSpelling=true, CharSet=CharSet.Unicode)]\r
+               internal static extern int SetWindowTheme(IntPtr hWnd, String pszSubAppName, String pszSubIdList);\r
        }\r
 }\r
index b2d0809..02dcdd7 100644 (file)
@@ -53,6 +53,7 @@ namespace AppliStation
                                runasCheckBox.Checked = false;\r
                                runasCheckBox.Visible = false;\r
                        }\r
+                       AppliStation.Util.NativeMethods.ListView_EnableVistaExplorerTheme(instsListView);\r
                }\r
                \r
                /// <summary>\r
index 7ff3efd..4b5dfaa 100644 (file)
@@ -28,6 +28,7 @@ namespace AppliStation
                        pkgListsMan = new PackageListsManager();\r
                        \r
                        this.Icon = Icon.ExtractAssociatedIcon(Application.ExecutablePath);\r
+                       AppliStation.Util.NativeMethods.ListView_EnableVistaExplorerTheme(packageListView);\r
                }\r
                \r
                private void ShowInfoToDetailBoxFor(Package pkg)\r