>  기사  >  백엔드 개발  >  C# 개발예 - 맞춤형 스크린샷 도구 (5) 드래그 시 깜박임, 멈춤 현상 최적화

C# 개발예 - 맞춤형 스크린샷 도구 (5) 드래그 시 깜박임, 멈춤 현상 최적화

黄舟
黄舟원래의
2017-03-14 13:27:422019검색

구현 중 실수로 인해 기본 폼의 영역 다시 그리기 기술을 사용하지 않고 대신 Label 컴포넌트를 사용하여 가로채는 그림 영역을 표시하므로 드래그 시 해당 영역이 가로채어지게 됩니다. 스크린샷을 더 작게 만들거나 스크린샷을 거꾸로 찍을 때 깜박임과 정지 현상이 더 심각해집니다. 다음은 이 두 가지 문제를 해결하기 위한 몇 가지 대상 최적화입니다.

C#이중 버퍼링 설명:

간단히 말하면 그리기 작업을 수행할 때 시스템은 다음과 같습니다. 직접 화면에 내용을 표시하는 대신, 먼저 메모리에 저장한 후 결과를 한꺼번에 출력하는 방식으로 이중 버퍼링을 사용하지 않으면 그리기 과정에서 화면이 심하게 깜박이는 것을 볼 수 있습니다. 배경이 계속 새로 고쳐집니다. 출력하기 전에 사용자가 그리기를 마칠 때까지 기다리면 이러한 상황이 발생하지 않습니다. 구체적인 방법은 먼저 비트맵 개체 를 만든 다음 그 안에 콘텐츠를 저장하고 마지막으로 표시하는 것입니다. 이미지.

이중 버퍼링 활성화

        public Form1()
        {
            InitializeComponent();
            // 解决窗口闪烁的问题
            SetStyle(ControlStyles.UserPaint | ControlStyles.ResizeRedraw | ControlStyles.AllPaintingInWmPaint | ControlStyles.OptimizedDoubleBuffer, true);
        }

다시 그리기 지연

여기서는 다시 그리기의 필요성을 줄이기 위해 다시 그리기를 매우 자주 수행합니다. .

변수 추가:

        /// <summary>
        /// 记录鼠标上一次移动的时间
        /// </summary>
        private long lastMouseMoveTime = System.DateTime.Now.Ticks;

"UpdateCutInfoLabel" 메서드에 다시 그리기 컨트롤 추가:

        /// <summary>
        /// 更新截图信息显示框,截图编辑工具框
        /// </summary>
        private void UpdateCutInfoLabel(UpdateUIMode updateUIMode) // UpdateUIMode updateUIMode = UpdateUIMode.None
        {
            //大于300毫秒或有组件显示或隐藏才进行重绘
            long mouseMoveTimeStep = System.DateTime.Now.Ticks - lastMouseMoveTime;
            if (mouseMoveTimeStep < 300 && updateUIMode == UpdateUIMode.None) { return; }
            lastMouseMoveTime = System.DateTime.Now.Ticks;

            if (this.lbl_CutImage.Visible || (updateUIMode & UpdateUIMode.ShowCutImage) != UpdateUIMode.None)
            {
                this.lbl_CutImage.SetBounds(this.cutImageRect.Left, this.cutImageRect.Top, this.cutImageRect.Width, this.cutImageRect.Height, BoundsSpecified.All);
                if (!this.lbl_CutImage.Visible)
                {
                    this.lbl_CutImage.Show();
                }
            }
        }

테스트 후, 드래그가 갑자기 좋아지는 현상이 대폭 개선되었습니다.



위 내용은 C# 개발예 - 맞춤형 스크린샷 도구 (5) 드래그 시 깜박임, 멈춤 현상 최적화의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.