OSDN Git Service

na-get-lib,ひとまず依存関係解決関数群を作った。
[applistation/AppliStation.git] / AppliStation / AppliStation.Util / NativeMethods.cs
index f739712..b56ce38 100644 (file)
@@ -1,21 +1,27 @@
-using System;\r
+using System;\r
 using System.Runtime.InteropServices;\r
 using System.Windows.Forms;\r
 \r
 namespace AppliStation.Util\r
 {\r
+       /// <summary>\r
+       /// Win32ネイティブメソッドを叩いてGUI操作するための関数群のクラス\r
+       /// </summary>\r
        public sealed class NativeMethods\r
        {\r
+               /// <summary>\r
+               /// 呼び出し禁止\r
+               /// </summary>\r
                private NativeMethods()\r
                {\r
                }\r
                \r
-               \r
+\r
                /// <summary>\r
-               /// WindowsVista\8cü\82¯\81A\83v\83\8d\83O\83\8c\83X\83o\81[\83X\83e\81[\83^\83X(\90F)\82ð\90Ý\92è\82·\82é\r
+               /// WindowsVista向け、プログレスバーステータス(色)を設定する\r
                /// </summary>\r
-               /// <param name="progBar">\91Î\8fÛ\82Ì\83v\83\8d\83O\83\8c\83X\83o\81[</param>\r
-               /// <param name="state">\8fó\91Ô\81B(1:Normal,2:Error,3:Paused)</param>\r
+               /// <param name="progBar">対象のプログレスバー</param>\r
+               /// <param name="state">状態。(1:Normal,2:Error,3:Paused)</param>\r
                public static void ProgressBar_SetState(ProgressBar progBar, uint state)\r
                {\r
                        try {\r
@@ -26,34 +32,34 @@ namespace AppliStation.Util
                        }\r
                }\r
                \r
-               #region \83^\83X\83N\83o\81[\82¨\82æ\82Ñ\83^\83C\83g\83\8b\83o\81[\82Ì\83t\83\89\83b\83V\83\85\r
+               #region タスクバーおよびタイトルバーのフラッシュ\r
                \r
                /// <summary>\r
-               /// \83^\83X\83N\83o\81[\82¨\82æ\82Ñ\83^\83C\83g\83\8b\83o\81[\83{\83^\83\93\82Ì\83t\83\89\83b\83V\83\85\82Ì\90Ý\92è\83t\83\89\83O\r
+               /// タスクバーおよびタイトルバーボタンのフラッシュの設定フラグ\r
                /// </summary>\r
                public enum FlashFlag : uint {\r
                        /// <summary>\r
-                       /// \93_\96Å\82Ì\92â\8e~\r
+                       /// 点滅の停止\r
                        /// </summary>\r
                        Stop = 0,\r
                        /// <summary>\r
-                       /// \83^\83C\83g\83\8b\83o\81[\82ð\93_\96Å\r
+                       /// タイトルバーを点滅\r
                        /// </summary>\r
                        Caption = 1,\r
                        /// <summary>\r
-                       /// \83^\83X\83N\83o\81[\83{\83^\83\93\82ð\93_\96Å\r
+                       /// タスクバーボタンを点滅\r
                        /// </summary>\r
                        Tray = 2,\r
                        /// <summary>\r
-                       /// \83^\83C\83g\83\8b\83o\81[\82Æ\83^\83X\83N\83o\81[\83{\83^\83\93\82ð\93_\96Å\r
+                       /// タイトルバーとタスクバーボタンを点滅\r
                        /// </summary>\r
                        All = 3,\r
                        /// <summary>\r
-                       /// Stop\82ª\90Ý\92è\82³\82ê\82é\82Ü\82Å\93_\96Å\82·\82é\r
+                       /// Stopが設定されるまで点滅する\r
                        /// </summary>\r
                        Timer = 4,\r
                        /// <summary>\r
-                       /// \83t\83H\83A\83O\83\89\83E\83\93\83h\82Ì\8fó\91Ô\82É\82È\82é\82Ü\82Å\93_\96Å\r
+                       /// フォアグラウンドの状態になるまで点滅\r
                        /// </summary>\r
                        TimerNoFG = 12,\r
                }\r
@@ -69,12 +75,12 @@ namespace AppliStation.Util
                }\r
                \r
                /// <summary>\r
-               /// \83^\83X\83N\83o\81[\82¨\82æ\82Ñ\83^\83C\83g\83\8b\83o\81[\83{\83^\83\93\82ð\93_\96Å\82³\82¹\82é\r
+               /// タスクバーおよびタイトルバーボタンを点滅させる\r
                /// </summary>\r
-               /// <param name="form">\91Î\8fÛ\83t\83H\81[\83\80</param>\r
-               /// <param name="flag">\93_\96Å\83p\83\89\83\81\81[\83^\83t\83\89\83O</param>\r
-               /// <param name="count">\93_\96Å\89ñ\90\94</param>\r
-               /// <param name="timeout">\93_\96Å\82Ì\8aÔ\8au(\83~\83\8a\95b)</param>\r
+               /// <param name="form">対象フォーム</param>\r
+               /// <param name="flag">点滅パラメータフラグ</param>\r
+               /// <param name="count">点滅回数</param>\r
+               /// <param name="timeout">点滅の間隔(ミリ秒)</param>\r
                /// <returns></returns>\r
                public static bool Form_FlashWindow(Form form, FlashFlag flag, uint count, uint timeout)\r
                {\r
@@ -97,7 +103,45 @@ namespace AppliStation.Util
                \r
                #endregion\r
                \r
-               #region ColumnHeader\82Ì\83\\81[\83g\82Ì\8eO\8ap\88ó\97p\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
                internal struct HD_ITEM\r
@@ -120,11 +164,11 @@ namespace AppliStation.Util
                }\r
                \r
                /// <summary>\r
-               /// WinXP\88È\8d~\81A\83\\81[\83g\82Ì\96î\88ó\82ð\95\\8e¦\r
+               /// WinXP以降、ソートの矢印を表示\r
                /// </summary>\r
-               /// <param name="listView">\91Î\8fÛ\82ÌListView</param>\r
-               /// <param name="column">\95\\8e¦\82·\82é\96î\88ó\82Ì\83w\83b\83_</param>\r
-               /// <param name="order">\83\\81[\83g\82Ì\8f¸\8f\87\81E\8d~\8f\87</param>\r
+               /// <param name="listView">対象のListView</param>\r
+               /// <param name="column">表示する矢印のヘッダ</param>\r
+               /// <param name="order">ソートの昇順・降順</param>\r
                public static void ColumnHeader_SetSortState(ListView listView, int column, SortOrder order)\r
                {\r
                        try {\r
@@ -142,9 +186,9 @@ namespace AppliStation.Util
                                        \r
                                        if (i != column || order == SortOrder.None) {\r
                                                hdi.fmt = hdi.fmt & ~(HDF_SORTUP | HDF_SORTDOWN);\r
-                                       } else if (order == SortOrder.Ascending) { // \8f¸\8f\87\r
+                                       } else if (order == SortOrder.Ascending) { // 昇順\r
                                                hdi.fmt = hdi.fmt & ~HDF_SORTDOWN | HDF_SORTUP;\r
-                                       } else if (order == SortOrder.Descending) { // \8d~\8f\87\r
+                                       } else if (order == SortOrder.Descending) { // 降順\r
                                                hdi.fmt = hdi.fmt & ~HDF_SORTUP | HDF_SORTDOWN;\r
                                        }\r
                                        \r
@@ -157,10 +201,44 @@ namespace AppliStation.Util
                \r
                #endregion\r
                \r
+               #endregion\r
+               \r
+               #region EnableWindow(コメントアウト)\r
+//             /// <summary>\r
+//             /// 指定されたコントロール(ウィンドウ)への、\r
+//             /// キーボード入力およびマウス入力を有効化または無効化\r
+//             /// </summary>\r
+//             /// <param name="control">対象のコントロールのハンドラ</param>\r
+//             /// <param name="bEnable">有効にするか無効にするかを指定</param>\r
+//             /// <returns>直前にウィンドウが無効状態だった場合はtrueを返す</returns>\r
+//             public static bool Control_EnableWindow(Control ctrl, bool bEnable)\r
+//             {\r
+//                     try {\r
+//                             return EnableWindow(ctrl.Handle, bEnable);\r
+//                     } catch {\r
+//                             ctrl.Enabled = bEnable;\r
+//                             return true;\r
+//                     }\r
+//             }\r
+//             \r
+//             /// <summary>\r
+//             /// 指定されたコントロール(ウィンドウ)への、\r
+//             /// キーボード入力およびマウス入力を有効化または無効化\r
+//             /// </summary>\r
+//             /// <param name="control">対象のコントロールのハンドラ</param>\r
+//             /// <param name="bEnable">有効にするか無効にするかを指定</param>\r
+//             /// <returns>直前にウィンドウが無効状態だった場合はtrueを返す</returns>\r
+//             [DllImport("user32.dll")]\r
+//             public static extern bool EnableWindow(IntPtr hWnd, bool bEnable);\r
+               #endregion\r
+               \r
                [DllImport("user32.dll", CharSet=CharSet.Auto)]\r
                internal static extern IntPtr SendMessage( IntPtr hWnd, UInt32 Msg, UInt32 wParam, UInt32 lParam);\r
                \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