첨부 실행 코드는 나눔고딕코딩 폰트를 사용합니다.
본 블로그는 광고를 포함하고 있습니다.
광고 클릭에서 발생하는 수익금은 모두 블로그 콘텐츠 향상을 위해 쓰여집니다.

728x90
반응형
728x170

TestProject.zip
다운로드

▶ Program.cs

using System;
using System.Windows.Forms;

namespace TestProject
{
    /// <summary>
    /// 프로그램
    /// </summary>
    static class Program
    {
        //////////////////////////////////////////////////////////////////////////////////////////////////// Method
        ////////////////////////////////////////////////////////////////////////////////////////// Static
        //////////////////////////////////////////////////////////////////////////////// Private

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

        /// <summary>
        /// 프로그램 시작하기
        /// </summary>
        [STAThread]
        static void Main()
        {
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            Application.Run(new TestApplicationContext());
        }

        #endregion
    }
}

 

▶ TestApplicationContext.cs

using System;
using System.Collections.Generic;
using System.Text;
using System.Windows.Forms;

namespace TestProject
{
    /// <summary>
    /// 테스트 애플리케이션 컨텍스트
    /// </summary>
    public class TestApplicationContext : ApplicationContext
    {
        //////////////////////////////////////////////////////////////////////////////////////////////////// Field
        ////////////////////////////////////////////////////////////////////////////////////////// Private

        #region Field

        /// <summary>
        /// Configuration 메뉴 항목
        /// </summary>
        private MenuItem configurationMenuItem;

        /// <summary>
        /// Exit 메뉴 항목
        /// </summary>
        private MenuItem exitMenuItem;

        /// <summary>
        /// 알림 아이콘
        /// </summary>
        private NotifyIcon notifyIcon;


        /// <summary>
        /// 구성 폼
        /// </summary>
        private ConfigurationForm configurationForm;

        #endregion

        //////////////////////////////////////////////////////////////////////////////////////////////////// Constructor
        ////////////////////////////////////////////////////////////////////////////////////////// Public

        #region 생성자 - TaskTrayApplicationContext()

        /// <summary>
        /// 생성자
        /// </summary>
        public TestApplicationContext()
        {
            this.configurationMenuItem = new MenuItem();

            this.configurationMenuItem.Name = "configurationMenuItem";
            this.configurationMenuItem.Text = "Configuration";


            this.exitMenuItem = new MenuItem();

            this.exitMenuItem.Name = "exitMenuItem";
            this.exitMenuItem.Text = "Exit";


            this.notifyIcon = new NotifyIcon();

            this.notifyIcon.Icon        = TestProject.Properties.Resources.tray;
            this.notifyIcon.ContextMenu = new ContextMenu(new MenuItem[] { configurationMenuItem, exitMenuItem });
            this.notifyIcon.Visible     = true;


            this.configurationForm = new ConfigurationForm();


            this.configurationMenuItem.Click += configurationMenuItem_Click;
            this.exitMenuItem.Click          += exitMenuItem_Click;
            this.notifyIcon.DoubleClick      += notifyIcon_DoubleClick;
        }

        #endregion

        //////////////////////////////////////////////////////////////////////////////////////////////////// Method
        ////////////////////////////////////////////////////////////////////////////////////////// Private

        #region Configuration 메뉴 항목 클릭시 처리하기 - configurationMenuItem_Click(sender, e)

        /// <summary>
        /// Configuration 메뉴 항목 클릭시 처리하기
        /// </summary>
        /// <param name="sender">이벤트 발생자</param>
        /// <param name="e">이벤트 인자</param>
        private void configurationMenuItem_Click(object sender, EventArgs e)
        {
            if(this.configurationForm.Visible)
            {
                this.configurationForm.Focus();
            }
            else
            {
                this.configurationForm.ShowDialog();
            }
        }

        #endregion
        #region Exit 메뉴 항목 클릭시 처리하기 - exitMenuItem_Click(sender, e)

        /// <summary>
        /// Exit 메뉴 항목 클릭시 처리하기
        /// </summary>
        /// <param name="sender">이벤트 발생자</param>
        /// <param name="e">이벤트 인자</param>
        private void exitMenuItem_Click(object sender, EventArgs e)
        {
            this.notifyIcon.Visible = false;

            Application.Exit();
        }

        #endregion
        #region 알림 아이콘 더블 클릭시 처리하기 - notifyIcon_DoubleClick(sender, e)

        /// <summary>
        /// 알림 아이콘 더블 클릭시 처리하기
        /// </summary>
        /// <param name="sender">이벤트 발생자</param>
        /// <param name="e">이벤트 인자</param>
        private void notifyIcon_DoubleClick(object sender, EventArgs e)
        {
            if(this.configurationForm.ShowMessage)
            {
                MessageBox.Show("Information", "Hello World", MessageBoxButtons.OK, MessageBoxIcon.Information);
            }
        }

        #endregion
    }
}

 

▶ ConfigurationForm.cs

using System;
using System.Windows.Forms;

namespace TestProject
{
    /// <summary>
    /// 구성 폼
    /// </summary>
    public partial class ConfigurationForm : Form
    {
        //////////////////////////////////////////////////////////////////////////////////////////////////// Field
        ////////////////////////////////////////////////////////////////////////////////////////// Private

        #region Field

        /// <summary>
        /// 메시지 표시 여부
        /// </summary>
        private bool showMessage = true;

        #endregion

        //////////////////////////////////////////////////////////////////////////////////////////////////// Property
        ////////////////////////////////////////////////////////////////////////////////////////// Public

        #region 메시지 표시 여부 - ShowMessage

        /// <summary>
        /// 메시지 표시 여부
        /// </summary>
        public bool ShowMessage
        {
            get
            {
                return this.showMessage;
            }
        }

        #endregion

        //////////////////////////////////////////////////////////////////////////////////////////////////// Constructor
        ////////////////////////////////////////////////////////////////////////////////////////// Public

        #region 생성자 - ConfigurationForm()

        /// <summary>
        /// 생성자
        /// </summary>
        public ConfigurationForm()
        {
            InitializeComponent();

            Activated               += Form_Activated;
            this.applyButton.Click  += applyButton_Click;
            this.cancelButton.Click += cancelButton_Click;
        }

        #endregion

        //////////////////////////////////////////////////////////////////////////////////////////////////// Method
        ////////////////////////////////////////////////////////////////////////////////////////// Private

        #region 폼 활성화시 처리하기 - Form_Activated(sender, e)

        /// <summary>
        /// 폼 활성화시 처리하기
        /// </summary>
        /// <param name="sender">이벤트 발생자</param>
        /// <param name="e">이벤트 인자</param>
        private void Form_Activated(object sender, EventArgs e)
        {
            this.showMessageCheckBox.Checked = this.showMessage;
        }

        #endregion
        #region Apply 버튼 클릭시 처리하기 - applyButton_Click(sender, e)

        /// <summary>
        /// Apply 버튼 클릭시 처리하기
        /// </summary>
        /// <param name="sender">이벤트 발생자</param>
        /// <param name="e">이벤트 인자</param>
        private void applyButton_Click(object sender, EventArgs e)
        {
            this.showMessage = this.showMessageCheckBox.Checked;

            Close();
        }

        #endregion
        #region Cancel 버튼 클릭시 처리하기 - cancelButton_Click(sender, e)

        /// <summary>
        /// Cancel 버튼 클릭시 처리하기
        /// </summary>
        /// <param name="sender">이벤트 발생자</param>
        /// <param name="e">이벤트 인자</param>
        private void cancelButton_Click(object sender, EventArgs e)
        {
            Close();
        }

        #endregion
    }
}
728x90
반응형
그리드형
Posted by 사용자 icodebroker

댓글을 달아 주세요