개발/C#

[팁] C# 윈폼 꾸미기

FA1976 2018. 1. 25. 14:20

        public Form1()

        {

            InitializeComponent();

            DesignInitial();

        }

#region 폼꾸미기

        /// <summary>

        /// 반투명 효과 알파 값

        /// </summary>

        private int percentAlpha = 70;

        /// <summary>

        /// 반투명 효과 색상

        /// </summary>

        private Color pb = new Color();

        /// <summary>

        /// 그라데이션 브러쉬

        /// </summary>

        private LinearGradientBrush lineGBrush;

        /// <summary>

        /// 마우스로 폼 드래그 하기

        /// </summary>

        private Point mCurrentPosition = new Point(0, 0);


        /// <summary>

        /// 마우스로 폼 드래그할 때 상단 타이틀 모양을 클릭 했을 경우 드래그 하기

        /// </summary>

        private bool m_titleMove = false;


        private void DesignInitial()

        {

            /* 항상 최상위 상단으로 표현 */

            // this.TopMost = true;

            /* 컨트롤 박스 없애기 */

            this.ControlBox = false;

            /* 키 프리뷰 설정 */

            this.KeyPreview = true;

            /* 하단 그립 없애기 */

            this.SizeGripStyle = SizeGripStyle.Hide;

            /* 폼 테두리 변경 */

            this.FormBorderStyle = FormBorderStyle.None;

            /* 더블 버퍼링 설정 */

            this.SetStyle(ControlStyles.DoubleBuffer, true);

            this.SetStyle(ControlStyles.UserPaint, true);

            this.SetStyle(ControlStyles.AllPaintingInWmPaint, true);

            this.SetStyle(ControlStyles.ResizeRedraw, true);

            /* 컬러 설정 */

            pb = Color.FromArgb(percentAlpha * 255 / 100, Color.FromArgb(255, 128, 0));

            /* 그라데이션 설정 */

            lineGBrush = new LinearGradientBrush(

            new PointF(0, 0), new PointF(this.Width, 0),

            Color.Red,

            pb);

            /* 라인브러쉬에 블랜드 적용 */

            float[] relativeIntensities = { 1.3f, 0.5f, 1.0f };

            float[] relativePositions = { 0.0f, 0.1f, 1.0f };

            Blend blend = new Blend();

            blend.Factors = relativeIntensities;

            blend.Positions = relativePositions;

            lineGBrush.Blend = blend;

        }


        private void Form1_FormClosed(object sender, FormClosedEventArgs e)

        {

            this.lineGBrush.Dispose();

        }


        private void Form1_KeyDown(object sender, KeyEventArgs e)

        {

            //ESC버턴 클릭시 폼 닫기

            if (e.KeyCode == Keys.Escape)

            {

                this.Close();

            }

        }


        private void Form1_MouseDown(object sender, MouseEventArgs e)

        {

            /* 마우스로 폼 드래그 */

            if (e.Button == MouseButtons.Left && e.Y < 16)

            {

                mCurrentPosition = new Point(-e.X, -e.Y);

                this.m_titleMove = true;

            }

        }


        private void Form1_MouseMove(object sender, MouseEventArgs e)

        {

            /* 마우스로 폼 드래그 */

            if (e.Button == MouseButtons.Left && this.m_titleMove == true)

            {

                this.Location = new Point(

                this.Location.X + (mCurrentPosition.X + e.X),

                this.Location.Y + (mCurrentPosition.Y + e.Y));// 마우스의 이동치를 Form Location에 반영한다.

            }

        }


        private void Form1_MouseUp(object sender, MouseEventArgs e)

        {

            /* 마우스로 폼 드래그 */

            if (e.Button == MouseButtons.Left && this.m_titleMove == true)

            {

                this.Location = new Point(

                this.Location.X + (mCurrentPosition.X + e.X),

                this.Location.Y + (mCurrentPosition.Y + e.Y));// 마우스의 이동치를 Form Location에 반영한다.

                this.m_titleMove = false;

            }

        }


        private void Form1_Paint(object sender, PaintEventArgs e)

        {

            /* 바탕화면을 흰색으로 */

            e.Graphics.Clear(Color.Black);

            /* 브러쉬 설정 */

            SolidBrush sBrush = new SolidBrush(Color.FromArgb(255, 128, 0));

            sBrush.Color = Color.White;

            /* 화면 그리기 */

            Image memImage = new Bitmap(this.Width, this.Height);

            Graphics g = Graphics.FromImage(memImage);

            /* 상단 title 표현 */

            string title = "YouTube Player";

            g.FillRectangle(this.lineGBrush, 0, 0, this.Width, 30);

            g.DrawString(title, this.Font, sBrush, 5F, 10F);

            /* 화면으로 표현 */

            e.Graphics.DrawImage(memImage, ClientRectangle);

            /* 가비지 수집기로 삭제 */

            g.Dispose();

            memImage.Dispose();

            sBrush.Dispose();

        }


        #endregion


종료버튼이 없는데 이것은 버튼 하나 생성해서 이미지 파일로 덮어씌운후 이벤트로 종료를 하면됨.