OSDN Git Service

AppliStation-GUI,進捗ダイアログのレイアウトを微修正
[applistation/AppliStation.git] / AppliStation / AppliStation.Util / NativeMethods.cs
index b56ce38..0065897 100644 (file)
@@ -1,4 +1,7 @@
-using System;\r
+// Vistaの効果を有効にするフラグ(不要の場合はコメントアウト)\r
+#define USE_VISTA_EFFECTS\r
+\r
+using System;\r
 using System.Runtime.InteropServices;\r
 using System.Windows.Forms;\r
 \r
@@ -15,7 +18,6 @@ namespace AppliStation.Util
                private NativeMethods()\r
                {\r
                }\r
-               \r
 \r
                /// <summary>\r
                /// WindowsVista向け、プログレスバーステータス(色)を設定する\r
@@ -24,12 +26,14 @@ namespace AppliStation.Util
                /// <param name="state">状態。(1:Normal,2:Error,3:Paused)</param>\r
                public static void ProgressBar_SetState(ProgressBar progBar, uint state)\r
                {\r
+#if USE_VISTA_EFFECTS\r
                        try {\r
                                // status := (PBST_NORMAL | PBST_ERROR | PBST_PAUSED)\r
                                // SendMessage(progressBar.Handle, PBM_SETSTATE, state, 0);\r
                                SendMessage(progBar.Handle, 0x410, state, 0);\r
                        } catch (Exception) {\r
                        }\r
+#endif\r
                }\r
                \r
                #region タスクバーおよびタイトルバーのフラッシュ\r
@@ -105,32 +109,30 @@ namespace AppliStation.Util
                \r
                #region ListView関連\r
                \r
-               #region 選択の半透明(コメント)\r
-               /*\r
                /// <summary>\r
-               /// ã\83\9eã\82¦ã\82¹ã\81§ã\81®é\81¸æ\8a\9eã\81«å\8d\8aé\80\8fæ\98\8eã\83\84ã\83¼ã\83«ã\82\92æ\8e¡ç\94¨する\r
+               /// ã\83ªã\82¹ã\83\88ã\83\93ã\83¥ã\83¼ã\81«ã\83\80ã\83\96ã\83«ã\83\90ã\83\83ã\83\95ã\82¡ã\81§ã\81®æ\8f\8fç\94»ã\82\92ã\81\99ã\82\8bã\81\8bå\90¦ã\81\8bã\82\92設å®\9aする\r
                /// </summary>\r
+               /// <remarks>マウスでの選択に半透明ツールを採用するか否かもこの設定に依存</remarks>\r
                /// <param name="listView">対象のリストビュー</param>\r
-               public static void ListView_EnableDoubleBuffer(ListView listView)\r
+               /// <param name="bEnable">ダブルバッファでの描画をするとき<code>true</code></param>\r
+               public static void ListView_SetDoubleBuffer(ListView listView, bool bEnable)\r
                {\r
                        try {\r
-                               // SendMessage(listView.Handle, LVM_SETEXTENDEDLISTVIEWSTYLE, LVS_EX_DOUBLEBUFFER, LVS_EX_DOUBLEBUFFER);\r
-                               SendMessage(listView.Handle, 0x1036, 0x00010000, 0x00010000);\r
+                               // SendMessage(listView.Handle, LVM_SETEXTENDEDLISTVIEWSTYLE, LVS_EX_DOUBLEBUFFER, bEnable? LVS_EX_DOUBLEBUFFER:0);\r
+                               SendMessage(listView.Handle, 0x1036, 0x00010000, ((bEnable)? 0x00010000u:0x0u));\r
                        } catch (Exception) {\r
                        }\r
                }\r
-               */\r
-               #endregion\r
                \r
                /// <summary>\r
                /// 選択されたアイテムの部分の背景にグラデーションがかかった感じになる、\r
                /// Vista以降でのエクスプローラの見た目をListViewに反映させる。\r
-               /// \r
-               /// なお、Vista未満のバージョンでは何もしない。\r
                /// </summary>\r
+               /// <remarks>Vista未満のバージョンでは何もしない。</remarks>\r
                /// <param name="listView">対象のListView</param>\r
                public static void ListView_EnableVistaExplorerTheme(ListView listView)\r
                {\r
+#if USE_VISTA_EFFECTS\r
                        // Vista未満はなにもしない\r
                        OperatingSystem os = Environment.OSVersion;\r
                        if (os.Platform != PlatformID.Win32NT || os.Version.Major < 6) return;\r
@@ -139,12 +141,30 @@ namespace AppliStation.Util
                                SetWindowTheme(listView.Handle, "explorer", null);\r
                        } catch (Exception) {\r
                        }\r
+#endif\r
+               }\r
+               \r
+               /// <summary>\r
+               /// ヘッダに"すべて選択"に似たチェックボックスを作るか否かを指定する\r
+               /// </summary>\r
+               /// <remarks>このオプションを設定するとVistaエクスプローラでの「チェックボックスを使用して項目を選択する」と同様の動作になる</remarks>\r
+               /// <param name="listView">対象のListBox</param>\r
+               /// <param name="bAutoCheckSelect">チェックボックスを使用して項目を選択するとき<code>true</code></param>\r
+               public static void ListView_SetAutoCheckSelect(ListView listView, bool bAutoCheckSelect)\r
+               {\r
+#if USE_VISTA_EFFECTS\r
+                       try {\r
+                               // SendMessage(listView.Handle, LVM_SETEXTENDEDLISTVIEWSTYLE, LVS_EX_AUTOCHECKSELECT, bAutoCheckSelect?LVS_EX_AUTOCHECKSELECT:0);\r
+                               SendMessage(listView.Handle, 0x1036, 0x08000000, (bAutoCheckSelect)?0x08000000u:0x0u);\r
+                       } catch (Exception) {\r
+                       }\r
+#endif\r
                }\r
                \r
                #region ColumnHeaderのソートの三角印用\r
                \r
                [StructLayout(LayoutKind.Sequential, CharSet=CharSet.Auto)]\r
-               internal struct HD_ITEM\r
+               private struct HD_ITEM\r
                {\r
                        public uint    mask;\r
                        public int     cxy;\r
@@ -232,13 +252,81 @@ namespace AppliStation.Util
 //             public static extern bool EnableWindow(IntPtr hWnd, bool bEnable);\r
                #endregion\r
                \r
+               #region RichTextBox関連\r
+               \r
+               [StructLayout(LayoutKind.Sequential)]\r
+               private struct CHARFORMAT2\r
+               {\r
+                       public int cbSize;\r
+                       public uint dwMask;\r
+                       public uint dwEffects;\r
+                       public int yHeight;\r
+                       public int yOffset;\r
+                       public int crTextColor;\r
+                       public byte bCharSet;\r
+                       public byte bPitchAndFamily;\r
+                       [MarshalAs(UnmanagedType.ByValArray, SizeConst=32)]\r
+                       public char[] szFaceName;\r
+                       public short wWeight;\r
+                       public short sSpacing;\r
+                       public int crBackColor;\r
+                       public int LCID;\r
+                       public uint dwReserved;\r
+                       public short sStyle;\r
+                       public short wKerning;\r
+                       public byte bUnderlineType;\r
+                       public byte bAnimation;\r
+                       public byte bRevAuthor;\r
+                       public byte bReserved1;\r
+               }\r
+               \r
+               /// <summary>\r
+               /// リッチテキストの選択部分に文字フォーマット効果を与える\r
+               /// </summary>\r
+               /// <param name="richTextBox">対象のリッチテキストボックス</param>\r
+               /// <param name="dwMask">有効な文字フォーマット効果</param>\r
+               /// <param name="dwEffect">文字フォーマット効果のフラグ</param>\r
+               public static void RichTextBox_SetSelectionFormat(RichTextBox richTextBox, uint dwMask, uint dwEffect)\r
+               {\r
+                       CHARFORMAT2 cfmt = new CHARFORMAT2();\r
+                       cfmt.cbSize = Marshal.SizeOf(typeof(CHARFORMAT2));\r
+                       cfmt.dwMask = dwMask;\r
+                       cfmt.dwEffects = dwEffect;\r
+                       \r
+                       //SendMessage(richTextBox.Handle, EM_SETCHARFORMAT, SCF_SELECTION, ref cfmt);\r
+                       SendMessage(richTextBox.Handle, 0x0444, 0x0001, ref cfmt);\r
+               }\r
+               /// <summary>\r
+               /// リッチテキストにテキストリンクを追加する\r
+               /// </summary>\r
+               /// <param name="richTextBox">対象のリッチテキストボックス</param>\r
+               /// <param name="text">追加するテキスト</param>\r
+               public static void RichTextBox_AddTextLink(RichTextBox richTextBox, string text)\r
+               {\r
+                       int pos = richTextBox.TextLength;\r
+                       richTextBox.Select(pos,0);\r
+                       richTextBox.SelectedText = text;\r
+                       richTextBox.Select(pos, text.Length);\r
+                       \r
+                       // RichTextBox_SetSelectionFormat(richTextBox, CFM_LINK, CFE_LINK);\r
+                       RichTextBox_SetSelectionFormat(richTextBox, 0x00000020, 0x0020);\r
+                       \r
+                       richTextBox.Select(richTextBox.TextLength, 0);\r
+               }\r
+               \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
+               private static extern IntPtr SendMessage( IntPtr hWnd, UInt32 Msg, int wParam, ref HD_ITEM lParam);\r
+               \r
+               [DllImport("user32.dll", CharSet=CharSet.Auto)]\r
+               private static extern IntPtr SendMessage(IntPtr hWnd, Int32 Msg, int wParam, ref CHARFORMAT2 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
 }\r