C#界面控件过多导致界面闪烁卡顿

约定不等于承诺〃 2022-09-06 01:14 623阅读 0赞

1.在窗体中加入下面的代码

  1. #region 开启界面双缓冲 解决窗体切换闪屏问题
  2. //下面的代码许加在MDI窗体中
  3. protected override CreateParams CreateParams
  4. {
  5. get
  6. {
  7. CreateParams cp = base.CreateParams;
  8. cp.ExStyle |= 0x02000000;
  9. return cp;
  10. }
  11. }
  12. #endregion

2.自定义双缓冲panel

  1. public partial class MyPanel : Panel
  2. {
  3. protected override void OnPaintBackground(PaintEventArgs e)
  4. {
  5. //do not allow the background to be painted
  6. }
  7. /**#region 开启界面双缓冲 解决窗体切换闪屏问题
  8. //下面的代码许加在MDI窗体中
  9. protected override CreateParams CreateParams
  10. {
  11. get
  12. {
  13. CreateParams cp = base.CreateParams;
  14. cp.ExStyle |= 0x02000000;
  15. return cp;
  16. }
  17. }
  18. #endregion
  19. protected override void WndProc(ref Message m) {
  20. if (m.Msg == 0x0014) // 禁掉清除背景消息
  21. return;
  22. base.WndProc(ref m);
  23. } **/
  24. protected override void OnPaint(System.Windows.Forms.PaintEventArgs e)
  25. {
  26. // 使用双缓冲
  27. this.DoubleBuffered = true;
  28. // 背景重绘移动到此
  29. if (this.BackgroundImage != null)
  30. {
  31. e.Graphics.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;
  32. e.Graphics.DrawImage(
  33. this.BackgroundImage,
  34. new System.Drawing.Rectangle(0, 0, this.Width, this.Height),
  35. 0,
  36. 0, this.BackgroundImage.Width, this.BackgroundImage.Height, System.Drawing.GraphicsUnit.Pixel);
  37. }
  38. base.OnPaint(e);
  39. }
  40. }

发表评论

表情:
评论列表 (有 0 条评论,623人围观)

还没有评论,来说两句吧...

相关阅读

    相关 c#界面==基础熟悉

      之前都是在看qt的界面制作,但是在Windows上面用qt做界面,总感觉是舍近求远。之前看过一点MFC,但没有看完,后来想接着看又有些忘了,我想c++的界面制作工具已经学了