OSDN Git Service

AppliStation,バージョンを1.1.0.*に変更。ソースファイルへのコメントの加筆
[applistation/AppliStation.git] / AppliStation / AppliStation.Util / NativeMethods.cs
1 using System;\r
2 using System.Runtime.InteropServices;\r
3 using System.Windows.Forms;\r
4 \r
5 namespace AppliStation.Util\r
6 {\r
7         /// <summary>\r
8         /// Win32ネイティブメソッドを叩いてGUI操作するための関数群のクラス\r
9         /// </summary>\r
10         public sealed class NativeMethods\r
11         {\r
12                 /// <summary>\r
13                 /// 呼び出し禁止\r
14                 /// </summary>\r
15                 private NativeMethods()\r
16                 {\r
17                 }\r
18                 \r
19                 \r
20                 /// <summary>\r
21                 /// WindowsVista向け、プログレスバーステータス(色)を設定する\r
22                 /// </summary>\r
23                 /// <param name="progBar">対象のプログレスバー</param>\r
24                 /// <param name="state">状態。(1:Normal,2:Error,3:Paused)</param>\r
25                 public static void ProgressBar_SetState(ProgressBar progBar, uint state)\r
26                 {\r
27                         try {\r
28                                 // status := (PBST_NORMAL | PBST_ERROR | PBST_PAUSED)\r
29                                 // SendMessage(progressBar.Handle, PBM_SETSTATE, state, 0);\r
30                                 SendMessage(progBar.Handle, 0x410, state, 0);\r
31                         } catch (Exception) {\r
32                         }\r
33                 }\r
34                 \r
35                 #region タスクバーおよびタイトルバーのフラッシュ\r
36                 \r
37                 /// <summary>\r
38                 /// タスクバーおよびタイトルバーボタンのフラッシュの設定フラグ\r
39                 /// </summary>\r
40                 public enum FlashFlag : uint {\r
41                         /// <summary>\r
42                         /// 点滅の停止\r
43                         /// </summary>\r
44                         Stop = 0,\r
45                         /// <summary>\r
46                         /// タイトルバーを点滅\r
47                         /// </summary>\r
48                         Caption = 1,\r
49                         /// <summary>\r
50                         /// タスクバーボタンを点滅\r
51                         /// </summary>\r
52                         Tray = 2,\r
53                         /// <summary>\r
54                         /// タイトルバーとタスクバーボタンを点滅\r
55                         /// </summary>\r
56                         All = 3,\r
57                         /// <summary>\r
58                         /// Stopが設定されるまで点滅する\r
59                         /// </summary>\r
60                         Timer = 4,\r
61                         /// <summary>\r
62                         /// フォアグラウンドの状態になるまで点滅\r
63                         /// </summary>\r
64                         TimerNoFG = 12,\r
65                 }\r
66                 \r
67                 [StructLayout(LayoutKind.Sequential)]\r
68                 struct FLASHWINFO\r
69                 {\r
70                     public int cbSize;\r
71                     public IntPtr hWnd;\r
72                     public FlashFlag dwFlags;\r
73                     public uint uCount;\r
74                     public uint dwTimeout;\r
75                 }\r
76                 \r
77                 /// <summary>\r
78                 /// タスクバーおよびタイトルバーボタンを点滅させる\r
79                 /// </summary>\r
80                 /// <param name="form">対象フォーム</param>\r
81                 /// <param name="flag">点滅パラメータフラグ</param>\r
82                 /// <param name="count">点滅回数</param>\r
83                 /// <param name="timeout">点滅の間隔(ミリ秒)</param>\r
84                 /// <returns></returns>\r
85                 public static bool Form_FlashWindow(Form form, FlashFlag flag, uint count, uint timeout)\r
86                 {\r
87                         try {\r
88                                 FLASHWINFO info = new FLASHWINFO();\r
89                                 info.cbSize = Marshal.SizeOf(typeof(FLASHWINFO));\r
90                                 info.hWnd = form.Handle;\r
91                                 info.dwFlags = flag;\r
92                                 info.uCount = count;\r
93                                 info.dwTimeout = timeout;\r
94                                 \r
95                                 return FlashWindowEx(ref info) == 0;\r
96                         } catch (Exception) {\r
97                                 return false;\r
98                         }\r
99                 }\r
100                 \r
101                 [DllImport("user32.dll")]\r
102                 static extern Int32 FlashWindowEx(ref FLASHWINFO pwfi);\r
103                 \r
104                 #endregion\r
105                 \r
106                 #region ColumnHeaderのソートの三角印用\r
107                 \r
108                 [StructLayout(LayoutKind.Sequential, CharSet=CharSet.Auto)]\r
109                 internal struct HD_ITEM\r
110                 {\r
111                         public uint    mask;\r
112                         public int     cxy;\r
113                         [MarshalAs(UnmanagedType.LPTStr)]public string   pszText;\r
114                         public IntPtr   hbm;\r
115                         public int     cchTextMax;\r
116                         public int     fmt;\r
117                         [MarshalAs(UnmanagedType.LPTStr)]public string  lParam;\r
118                         public int     iImage;        // index of bitmap in ImageList\r
119                         public int     iOrder;\r
120                 }\r
121                 \r
122                 internal static IntPtr ListView_GetHeader(ListView listview)\r
123                 {\r
124                         // SendMessage(hWnd, LVM_GETHEADER, 0, NULL);\r
125                         return SendMessage(listview.Handle, 0x101E, 0, 0);\r
126                 }\r
127                 \r
128                 /// <summary>\r
129                 /// WinXP以降、ソートの矢印を表示\r
130                 /// </summary>\r
131                 /// <param name="listView">対象のListView</param>\r
132                 /// <param name="column">表示する矢印のヘッダ</param>\r
133                 /// <param name="order">ソートの昇順・降順</param>\r
134                 public static void ColumnHeader_SetSortState(ListView listView, int column, SortOrder order)\r
135                 {\r
136                         try {\r
137                                 // SendMessage(hWnd, LVM_GETHEADER, NULL, NULL);\r
138                                 IntPtr hWnd = SendMessage(listView.Handle, 0x101F, 0, 0);\r
139                                 \r
140                                 HD_ITEM hdi = new HD_ITEM();\r
141                                 hdi.mask = 0x0004; // HDI_FORMAT;\r
142                                 for (int i = 0; i < listView.Columns.Count; i++) {\r
143                                         // SendMessage(hWnd, HDM_GETITEMW, i, &hdi);\r
144                                         SendMessage(hWnd, 0x120b, i, ref hdi);\r
145                                         \r
146                                         const int HDF_SORTUP = 0x400;\r
147                                         const int HDF_SORTDOWN = 0x200;\r
148                                         \r
149                                         if (i != column || order == SortOrder.None) {\r
150                                                 hdi.fmt = hdi.fmt & ~(HDF_SORTUP | HDF_SORTDOWN);\r
151                                         } else if (order == SortOrder.Ascending) { // 昇順\r
152                                                 hdi.fmt = hdi.fmt & ~HDF_SORTDOWN | HDF_SORTUP;\r
153                                         } else if (order == SortOrder.Descending) { // 降順\r
154                                                 hdi.fmt = hdi.fmt & ~HDF_SORTUP | HDF_SORTDOWN;\r
155                                         }\r
156                                         \r
157                                         // SendMessage(hWnd, HDM_SETITEMW, i, &hdi);\r
158                                         SendMessage(hWnd, 0x120c, i, ref hdi);\r
159                                 }\r
160                         } catch (Exception) {\r
161                         }\r
162                 }\r
163                 \r
164                 #endregion\r
165                 \r
166                 #region EnableWindow(コメントアウト)\r
167 //              /// <summary>\r
168 //              /// 指定されたコントロール(ウィンドウ)への、\r
169 //              /// キーボード入力およびマウス入力を有効化または無効化\r
170 //              /// </summary>\r
171 //              /// <param name="control">対象のコントロールのハンドラ</param>\r
172 //              /// <param name="bEnable">有効にするか無効にするかを指定</param>\r
173 //              /// <returns>直前にウィンドウが無効状態だった場合はtrueを返す</returns>\r
174 //              public static bool Control_EnableWindow(Control ctrl, bool bEnable)\r
175 //              {\r
176 //                      try {\r
177 //                              return EnableWindow(ctrl.Handle, bEnable);\r
178 //                      } catch {\r
179 //                              ctrl.Enabled = bEnable;\r
180 //                              return true;\r
181 //                      }\r
182 //              }\r
183 //              \r
184 //              /// <summary>\r
185 //              /// 指定されたコントロール(ウィンドウ)への、\r
186 //              /// キーボード入力およびマウス入力を有効化または無効化\r
187 //              /// </summary>\r
188 //              /// <param name="control">対象のコントロールのハンドラ</param>\r
189 //              /// <param name="bEnable">有効にするか無効にするかを指定</param>\r
190 //              /// <returns>直前にウィンドウが無効状態だった場合はtrueを返す</returns>\r
191 //              [DllImport("user32.dll")]\r
192 //              public static extern bool EnableWindow(IntPtr hWnd, bool bEnable);\r
193                 #endregion\r
194                 \r
195                 [DllImport("user32.dll", CharSet=CharSet.Auto)]\r
196                 internal static extern IntPtr SendMessage( IntPtr hWnd, UInt32 Msg, UInt32 wParam, UInt32 lParam);\r
197                 \r
198                 [DllImport("user32.dll", CharSet=CharSet.Auto)]\r
199                 internal static extern IntPtr SendMessage( IntPtr hWnd, UInt32 Msg, int wParam, ref HD_ITEM lParam);\r
200         }\r
201 }\r