OSDN Git Service

2016夏イベのE-1のボス戦でエラーになるのを直す
[kancollesniffer/KancolleSniffer.git] / KancolleSniffer / DbTreeView.cs
1 // http://www.codeproject.com/Articles/37253/Double-buffered-Tree-and-Listviews\r
2 //\r
3 // The MIT License (MIT)\r
4 //\r
5 // Copyright (c) 2009 Eugene Sichkar\r
6 //\r
7 // Permission is hereby granted, free of charge, to any person obtaining a copy\r
8 // of this software and associated documentation files (the "Software"), to deal\r
9 // in the Software without restriction, including without limitation the rights\r
10 // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\r
11 // copies of the Software, and to permit persons to whom the Software is\r
12 // furnished to do so, subject to the following conditions:\r
13 //\r
14 // The above copyright notice and this permission notice shall be included in\r
15 // all copies or substantial portions of the Software.\r
16 //\r
17 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r
18 // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r
19 // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\r
20 // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\r
21 // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\r
22 // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\r
23 // THE SOFTWARE.\r
24 \r
25 using System;\r
26 using System.Runtime.InteropServices;\r
27 using System.Windows.Forms;\r
28 \r
29 namespace KancolleSniffer\r
30 {\r
31     public class DbTreeView : TreeView\r
32     {\r
33         // ReSharper disable InconsistentNaming\r
34         private const int TV_FIRST = 0x1100;\r
35         private const int TVM_SETEXTENDEDSTYLE = TV_FIRST + 44;\r
36         private const int TVS_EX_DOUBLEBUFFER = 0x0004;\r
37         // ReSharper restore InconsistentNaming\r
38 \r
39         public DbTreeView()\r
40         {\r
41             // Enable default double buffering processing (DoubleBuffered returns true)\r
42             SetStyle(ControlStyles.OptimizedDoubleBuffer | ControlStyles.AllPaintingInWmPaint, true);\r
43         }\r
44 \r
45         private void UpdateExtendedStyles()\r
46         {\r
47             var style = 0;\r
48             if (DoubleBuffered)\r
49                 style |= TVS_EX_DOUBLEBUFFER;\r
50             if (style != 0)\r
51                 SendMessage(Handle, TVM_SETEXTENDEDSTYLE, (IntPtr)TVS_EX_DOUBLEBUFFER, (IntPtr)style);\r
52         }\r
53 \r
54         [DllImport("user32.dll")]\r
55         public static extern IntPtr SendMessage(IntPtr hWnd, int msg, IntPtr wParam, IntPtr lParam);\r
56 \r
57         protected override void OnHandleCreated(EventArgs e)\r
58         {\r
59             base.OnHandleCreated(e);\r
60             UpdateExtendedStyles();\r
61         }\r
62     }\r
63 }