优化.NET控制重新粉刷使用WM_SETRAW
> 在广泛的更新中, .NET开发人员通常需要暂时停止在控件及其子女内重新粉刷。 而SuspendLayout
和ResumeLayout
管理布局,它们不会完全抑制重新绘制。
wm_setredraw解决方案
>发送到控件的窗口句柄的消息提供了强大的解决方案。 布尔参数控制重新绘制:WM_SETREDRAW
disables,false
启用它。true
>实施悬挂图和恢复方法
这个简化的类封装了功能:
<code class="language-csharp">public static class ControlPainting { [DllImport("user32.dll")] public static extern int SendMessage(IntPtr hWnd, int wMsg, bool wParam, int lParam); private const int WM_SETREDRAW = 11; public static void SuspendPainting(Control parent) { SendMessage(parent.Handle, WM_SETREDRAW, false, 0); } public static void ResumePainting(Control parent) { SendMessage(parent.Handle, WM_SETREDRAW, true, 0); parent.Refresh(); } }</code>
>用法示例
防止重新粉刷:
<code class="language-csharp">ControlPainting.SuspendPainting(myControl); // ... perform modifications ... ControlPainting.ResumePainting(myControl);</code>
进一步阅读
有关更多深入信息,请咨询以下资源:
以上是我如何有效地暂停并恢复.NET控制及其孩子的绘画?的详细内容。更多信息请关注PHP中文网其他相关文章!