첨부 실행 코드는 나눔고딕코딩 폰트를 사용합니다.
유용한 소스 코드가 있으면 icodebroker@naver.com으로 보내주시면 감사합니다.
블로그 자료는 자유롭게 사용하세요.

■ SplashScreenManager 클래스 : ShowImage 정적 메소드를 사용해 스플래시 스크린 이미지 표시하기

------------------------------------------------------------------------------------------------------------------------


TestProject.zip


ViewInfo.cs

 

 

using System.Drawing;

using DevExpress.Utils.Drawing;

using DevExpress.Utils.Text;

 

namespace TestProject

{

    /// <summary>

    /// 뷰 정보

    /// </summary>

    public class ViewInfo

    {

        //////////////////////////////////////////////////////////////////////////////////////////////////// Field

        ////////////////////////////////////////////////////////////////////////////////////////// Private

 

        #region Field

 

        /// <summary>

        /// 폰트

        /// </summary>

        private Font font = null;

 

        /// <summary>

        /// 브러시

        /// </summary>

        private Brush brush = null;

 

        #endregion

 

        //////////////////////////////////////////////////////////////////////////////////////////////////// Property

        ////////////////////////////////////////////////////////////////////////////////////////// Public

 

        #region 단계 - Stage

 

        /// <summary>

        /// 단계

        /// </summary>

        public string Stage { get; set; }

 

        #endregion

        #region 카운터 - Counter

 

        /// <summary>

        /// 카운터

        /// </summary>

        public int Counter { get; set; }

 

        #endregion

 

        #region 폰트 - Font

 

        /// <summary>

        /// 폰트

        /// </summary>

        public Font Font

        {

            get

            {

                if(this.font == null)

                {

                    this.font = new Font("Consolas", 10);

                }

 

                return this.font;

            }

        }

 

        #endregion

        #region 브러시 - Brush

 

        /// <summary>

        /// 브러시

        /// </summary>

        public Brush Brush

        {

            get

            {

                if(this.brush == null)

                {

                    this.brush = new SolidBrush(Color.Black);

                }

 

                return this.brush;

            }

        }

 

        #endregion

        #region 텍스트 - Text

 

        /// <summary>

        /// 텍스트

        /// </summary>

        public string Text

        {

            get

            {

                return string.Format("{0} - ({1}%)", Stage, Counter.ToString("D2"));

            }

        }

 

        #endregion

 

        //////////////////////////////////////////////////////////////////////////////////////////////////// Constructor

        ////////////////////////////////////////////////////////////////////////////////////////// Public

 

        #region 생성자 - ViewInfo()

 

        /// <summary>

        /// 생성자

        /// </summary>

        public ViewInfo()

        {

            Stage   = string.Empty;

            Counter = 1;

        }

 

        #endregion

 

        //////////////////////////////////////////////////////////////////////////////////////////////////// Method

        ////////////////////////////////////////////////////////////////////////////////////////// Public

 

        #region 진행 레이블 포인트 구하기 - GetProgressLabelPoint(graphicsCache, boundRectangle)

 

        /// <summary>

        /// 진행 레이블 포인트 구하기

        /// </summary>

        /// <param name="graphicsCache">그래픽스 캐시</param>

        /// <param name="boundRectangle">경계 사각형</param>

        /// <returns>진행 레이블 포인트</returns>

        public PointF GetProgressLabelPoint(GraphicsCache graphicsCache, Rectangle boundRectangle)

        {

            const int yOffset = 40;

 

            Size size = TextUtils.GetStringSize(graphicsCache.Graphics, Text, Font);

 

            return new Point(boundRectangle.Width / 2 - size.Width / 2, yOffset);

        }

 

        #endregion

    }

}

 

 

SplashImagePainter.cs

 

 

using System.Drawing;

 

using DevExpress.Utils.Drawing;

using DevExpress.XtraSplashScreen;

 

namespace TestProject

{

    /// <summary>

    /// 스플래시 이미지 페인터

    /// </summary>

    class SplashImagePainter : ICustomImagePainter

    {

        ////////////////////////////////////////////////////////////////////////////////////////// Field

        //////////////////////////////////////////////////////////////////////////////// Instance

        ////////////////////////////////////////////////////////////////////// Private

 

        #region Field

 

        /// <summary>

        /// 뷰 정보

        /// </summary>

        private ViewInfo viewInfo = null;

 

        #endregion

 

        ////////////////////////////////////////////////////////////////////////////////////////// Property

        //////////////////////////////////////////////////////////////////////////////// Static

        ////////////////////////////////////////////////////////////////////// Public

 

        #region 페인터 - Painter

 

        /// <summary>

        /// 페인터

        /// </summary>

        public static SplashImagePainter Painter { get; private set; }

 

        #endregion

 

        //////////////////////////////////////////////////////////////////////////////// Instance

        ////////////////////////////////////////////////////////////////////// Public

 

        #region 뷰 정보 - ViewInfo

 

        /// <summary>

        /// 뷰 정보

        /// </summary>

        public ViewInfo ViewInfo

        {

            get

            {

                if(this.viewInfo == null)

                {

                    this.viewInfo = new ViewInfo();

                }

 

                return this.viewInfo;

            }

        }

 

        #endregion

 

        ////////////////////////////////////////////////////////////////////////////////////////// Constructor

        //////////////////////////////////////////////////////////////////////////////// Static

 

        #region SplashImagePainter()

 

        /// <summary>

        /// 생성자

        /// </summary>

        static SplashImagePainter()

        {

            Painter = new SplashImagePainter();

        }

 

        #endregion

 

        //////////////////////////////////////////////////////////////////////////////// Instance

        ////////////////////////////////////////////////////////////////////// Protected

 

        #region 생성자 - SplashImagePainter()

 

        /// <summary>

        /// 생성자

        /// </summary>

        protected SplashImagePainter()

        {

        }

 

        #endregion

 

        ////////////////////////////////////////////////////////////////////////////////////////// Method

        //////////////////////////////////////////////////////////////////////////////// Instance

        ////////////////////////////////////////////////////////////////////// Public

 

        #region 그리기 - Draw(graphicsCache, boundRectangle)

 

        /// <summary>

        /// 그리기

        /// </summary>

        /// <param name="graphicsCache">그래픽스 캐시</param>

        /// <param name="boundRectangle">경계 사각형</param>

        public void Draw(GraphicsCache graphicsCache, Rectangle boundRectangle)

        {

            PointF point = ViewInfo.GetProgressLabelPoint(graphicsCache, boundRectangle);

 

            graphicsCache.Graphics.DrawString(ViewInfo.Text, ViewInfo.Font, ViewInfo.Brush, point);

        }

 

        #endregion

    }

}

 

 

MainForm.cs

 

 

using System;

using System.Threading;

using System.Windows.Forms;

 

using DevExpress.XtraSplashScreen;

 

namespace TestProject

{

    /// <summary>

    /// 메인 폼

    /// </summary>

    public partial class MainForm : Form

    {

        //////////////////////////////////////////////////////////////////////////////////////////////////// Constructor

        ////////////////////////////////////////////////////////////////////////////////////////// Public

 

        #region 생성자 - MainForm()

 

        /// <summary>

        /// 생성자

        /// </summary>

        public MainForm()

        {

            InitializeComponent();

 

            InitializeTask();

        }

 

        #endregion

 

        //////////////////////////////////////////////////////////////////////////////////////////////////// Methid

        ////////////////////////////////////////////////////////////////////////////////////////// Protected

 

        #region 로드시 처리하기 - OnLoad(e)

 

        /// <summary>

        /// 로드시 처리하기

        /// </summary>

        /// <param name="e">이벤트 인자</param>

        protected override void OnLoad(EventArgs e)

        {

            base.OnLoad(e);

 

            SplashScreenManager.HideImage();

        }

 

        #endregion

 

        ////////////////////////////////////////////////////////////////////////////////////////// Private

 

        #region 작업 초기화 하기 #1 - InitializeTask1()

 

        /// <summary>

        /// 작업 초기화 하기 #1

        /// </summary>

        private void InitializeTask1()

        {

            SplashImagePainter.Painter.ViewInfo.Stage = "변수 생성";

 

            for(int i = 1; i <= 100; i++)

            {

                Thread.Sleep(20);

                

                SplashImagePainter.Painter.ViewInfo.Counter = i;

 

                SplashScreenManager.Default.Invalidate();

            }

        }

 

        #endregion

        #region 작업 초기화 하기 #2 - InitializeTask2()

 

        /// <summary>

        /// 작업 초기화 하기 #2

        /// </summary>

        private void InitializeTask2()

        {

            SplashImagePainter.Painter.ViewInfo.Stage = "폰트 로딩";

 

            for(int i = 1; i <= 100; i++)

            {

                Thread.Sleep(20);

 

                SplashImagePainter.Painter.ViewInfo.Counter = i;

 

                SplashScreenManager.Default.Invalidate();

            }

        }

 

        #endregion

        #region 작업 초기화 하기 #3 - InitializeTask3()

 

        /// <summary>

        /// 작업 초기화 하기 #3

        /// </summary>

        private void InitializeTask3()

        {

            SplashImagePainter.Painter.ViewInfo.Stage = "텍스처 로딩";

 

            for(int i = 1; i <= 100; i++)

            {

                Thread.Sleep(20);

 

                SplashImagePainter.Painter.ViewInfo.Counter = i;

 

                SplashScreenManager.Default.Invalidate();

            }

        }

 

        #endregion

 

        #region 작업 초기화 하기 - InitializeTask()

 

        /// <summary>

        /// 작업 초기화 하기

        /// </summary>

        private void InitializeTask()

        {

            InitializeTask1();

 

            InitializeTask2();

 

            InitializeTask3();

        }

 

        #endregion

    }

}

 

 

Program.cs

 

 

using System;

using System.Drawing;

using System.Reflection;

using System.Windows.Forms;

 

using DevExpress.XtraSplashScreen;

 

namespace TestProject

{

    /// <summary>

    /// 프로그램

    /// </summary>

    class Program

    {

        //////////////////////////////////////////////////////////////////////////////////////////////////// Method

        ////////////////////////////////////////////////////////////////////////////////////////// Static

        //////////////////////////////////////////////////////////////////////////////// Private

 

        #region 프로그램 시작하기 - Main()

 

        /// <summary>

        /// 프로그램 시작하기

        /// </summary>

        [STAThread]

        private static void Main()

        {

            Application.EnableVisualStyles();

            Application.SetCompatibleTextRenderingDefault(false);

 

            Image image = GetImage();

 

            SplashScreenManager.ShowImage(image, true, true, SplashImagePainter.Painter);

 

            Application.Run(new MainForm());

        }

 

        #endregion

 

        #region 이미지 구하기 - GetImage()

 

        /// <summary>

        /// 이미지 구하기

        /// </summary>

        /// <returns>이미지</returns>

        private static Image GetImage()

        {

            Assembly assembly = typeof(Program).Assembly;

 

            return new Bitmap(assembly.GetManifestResourceStream("TestProject.Image.sample.png"));

        }

 

        #endregion

    }

}

 

------------------------------------------------------------------------------------------------------------------------

'DevExpress > WinForm' 카테고리의 다른 글

[DEVEXPRESS/WINFORM] RibbonGalleryBarItem 클래스 : 특정 스킨 숨기기  (0) 2019.05.21
[DEVEXPRESS/WINFORM] AdornerUIManager 클래스 : 배지 사용하기  (0) 2019.05.06
[DEVEXPRESS/WINFORM] SplashScreenManager 클래스 : ShowOverlayForm 정적 메소드를 사용해 오버레임 폼 표시하기  (0) 2019.05.05
[DEVEXPRESS/WINFORM] CustomOverlayWindowPainter 클래스를 사용해 오버레이 폼에서 사용자 정의 그리기  (0) 2019.05.05
[DEVEXPRESS/WINFORM] AlertControl 클래스 : 알림 창 표시하기  (0) 2019.04.28
[DEVEXPRESS/WINFORM] SplashScreenManager 클래스 : ShowImage 정적 메소드를 사용해 스플래시 스크린 이미지 표시하기  (0) 2019.04.27
[DEVEXPRESS/WINFORM] SplashScreenManager 클래스 : ShowOverlayForm 정적 메소드를 사용해 오버레이 폼에 커스텀 버튼 표시하기  (0) 2019.04.27
[DEVEXPRESS/WINFORM] FluentDesignForm 클래스 사용하기  (0) 2019.04.27
[DEVEXPRESS/WINFORM] XtraForm 클래스 : MdiChildCaptionFormatString 속성을 사용해 부모 폼 제목과 MDI 자식 폼 제목 포맷 설정하기  (0) 2019.04.27
[DEVEXPRESS/WINFORM] SkinManager 클래스 : EnableMdiFormSkins 정적 메소드를 사용해 MDI 자식 폼의 타이틀바 스킨 활성화 하기  (0) 2019.04.27
[DEVEXPRESS/WINFORM] SkinManager 클래스 : EnableFormSkins 정적 메소드를 사용해 폼의 타이틀바 스킨 활성화 하기  (0) 2019.04.27
Posted by 사용자 icodebroker
TAG

댓글을 달아 주세요