-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
private NativeMethods()\r
{\r
}\r
- \r
\r
/// <summary>\r
/// WindowsVista向け、プログレスバーステータス(色)を設定する\r
/// <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
/// <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
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
// 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