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

728x90
반응형

TestProject.zip
다운로드

▶ MainWindow.cs

using System;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Media;
using System.Windows.Media.Imaging;

namespace TestProject
{
    /// <summary>
    /// 메인 윈도우
    /// </summary>
    public class MainWindow : Window
    {
        //////////////////////////////////////////////////////////////////////////////////////////////////// Field
        ////////////////////////////////////////////////////////////////////////////////////////// Protected

        #region Field

        /// <summary>
        /// 잘라내기 메뉴
        /// </summary>
        protected MenuItem cutMenuItem;

        /// <summary>
        /// 복사하기 메뉴
        /// </summary>
        protected MenuItem copyMenuItem;

        /// <summary>
        /// 붙여넣기 메뉴
        /// </summary>
        protected MenuItem pasteMenuItem;

        /// <summary>
        /// 지우기 메뉴
        /// </summary>
        protected MenuItem deleteMenuItem;

        #endregion

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

        #region Field

        /// <summary>
        /// 텍스트 블럭
        /// </summary>
        private TextBlock textBlock;

        #endregion

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

        #region 생성자 - MainWindow()

        /// <summary>
        /// 생성자
        /// </summary>
        public MainWindow()
        {
            Width      = 800;
            Height     = 600;
            Title      = "잘라내기, 복사하기, 그리고 붙여넣기";
            FontFamily = new FontFamily("나눔고딕코딩");
            FontSize   = 16;

            DockPanel dockPanel = new DockPanel();

            Content = dockPanel;

            Menu menu = new Menu();

            dockPanel.Children.Add(menu);

            DockPanel.SetDock(menu, Dock.Top);

            this.textBlock = new TextBlock();

            this.textBlock.Text                = "샘플 클립보드 텍스트";
            this.textBlock.HorizontalAlignment = HorizontalAlignment.Center;
            this.textBlock.VerticalAlignment   = VerticalAlignment.Center;
            this.textBlock.FontSize            = 32;
            this.textBlock.TextWrapping        = TextWrapping.Wrap;

            dockPanel.Children.Add(this.textBlock);

            #region Edit 메뉴

            MenuItem editMenuItem = new MenuItem();

            editMenuItem.Header = "_Edit";

            editMenuItem.SubmenuOpened += editMenuItem_SubmenuOpened;

            menu.Items.Add(editMenuItem);

            #endregion
                #region Cut 메뉴

                this.cutMenuItem = new MenuItem();

                this.cutMenuItem.Header = "Cu_t";

                this.cutMenuItem.Click += cutMenuItem_Click;

                Image cutImage = new Image();

                cutImage.Source = new BitmapImage(new Uri("pack://application:,,,/IMAGE/CutHS.png"));

                this.cutMenuItem.Icon = cutImage;

                editMenuItem.Items.Add(this.cutMenuItem);

                #endregion
                #region Copy 메뉴

                this.copyMenuItem = new MenuItem();

                this.copyMenuItem.Header = "_Copy";

                this.copyMenuItem.Click += copyMenuItem_Click;

                Image copyImage = new Image();

                copyImage.Source = new BitmapImage(new Uri("pack://application:,,,/IMAGE/CopyHS.png"));

                this.copyMenuItem.Icon = copyImage;

                editMenuItem.Items.Add(this.copyMenuItem);

                #endregion
                #region Paste 메뉴

                this.pasteMenuItem = new MenuItem();

                this.pasteMenuItem.Header = "_Paste";

                this.pasteMenuItem.Click += pasteMenuItem_Click;

                Image pasteImage = new Image();

                pasteImage.Source = new BitmapImage(new Uri("pack://application:,,,/IMAGE/PasteHS.png"));

                this.pasteMenuItem.Icon = pasteImage;

                editMenuItem.Items.Add(this.pasteMenuItem);

                #endregion
                #region Delete 메뉴

                this.deleteMenuItem = new MenuItem();

                this.deleteMenuItem.Header = "_Delete";

                this.deleteMenuItem.Click += deleteMenuItem_Click;

                Image deleteImage = new Image();

                deleteImage.Source = new BitmapImage(new Uri("pack://application:,,,/IMAGE/DeleteHS.png"));

                this.deleteMenuItem.Icon = deleteImage;

                editMenuItem.Items.Add(this.deleteMenuItem);

                #endregion
        }

        #endregion

        //////////////////////////////////////////////////////////////////////////////////////////////////// Method
        ////////////////////////////////////////////////////////////////////////////////////////// Static
        //////////////////////////////////////////////////////////////////////////////// Public

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

        /// <summary>
        /// 프로그램 시작하기
        /// </summary>
        [STAThread]
        public static void Main()
        {
            Application application = new Application();

            application.Run(new MainWindow());
        }

        #endregion

        ////////////////////////////////////////////////////////////////////////////////////////// Instance
        //////////////////////////////////////////////////////////////////////////////// Protected

        #region Cut 메뉴 클릭시 처리하기 - cutMenuItem_Click(sender, e)

        /// <summary>
        /// Cut 메뉴 클릭시 처리하기
        /// </summary>
        /// <param name="sender">이벤트 발생자</param>
        /// <param name="e">이벤트 인자</param>
        protected void cutMenuItem_Click(object sender, RoutedEventArgs e)
        {
            copyMenuItem_Click(sender, e);

            deleteMenuItem_Click(sender, e);
        }

        #endregion
        #region Copy 메뉴 클릭시 처리하기 - copyMenuItem_Click(sender, e)

        /// <summary>
        /// Copy 메뉴 클릭시 처리하기
        /// </summary>
        /// <param name="sender">이벤트 발생자</param>
        /// <param name="e">이벤트 인자</param>
        protected void copyMenuItem_Click(object sender, RoutedEventArgs e)
        {
            if(this.textBlock.Text != null && this.textBlock.Text.Length > 0)
            {
                Clipboard.SetText(this.textBlock.Text);
            }
        }

        #endregion
        #region Paste 메뉴 클릭시 처리하기 - pasteMenuItem_Click(sender, e)

        /// <summary>
        /// Paste 메뉴 클릭시 처리하기
        /// </summary>
        /// <param name="sender">이벤트 발생자</param>
        /// <param name="e">이벤트 인자</param>
        protected void pasteMenuItem_Click(object sender, RoutedEventArgs e)
        {
            if(Clipboard.ContainsText())
            {
                this.textBlock.Text = Clipboard.GetText();
            }
        }
        
        #endregion
        #region Delete 메뉴 클릭시 처리하기 - deleteMenuItem_Click(sender, e)

        /// <summary>
        /// Delete 메뉴 클릭시 처리하기
        /// </summary>
        /// <param name="sender">이벤트 발생자</param>
        /// <param name="e">이벤트 인자</param>
        protected void deleteMenuItem_Click(object sender, RoutedEventArgs e)
        {
            this.textBlock.Text = null;
        }

        #endregion

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

        #region Edit 메뉴 하위 메뉴 오픈시 처리하기 - editMenuItem_SubmenuOpened(sender, e)

        /// <summary>
        /// Edit 메뉴 하위 메뉴 오픈시 처리하기
        /// </summary>
        /// <param name="sender">이벤트 발생자</param>
        /// <param name="e">이벤트 인자</param>
        private void editMenuItem_SubmenuOpened(object sender, RoutedEventArgs e)
        {
            this.cutMenuItem.IsEnabled = this.copyMenuItem.IsEnabled = this.deleteMenuItem.IsEnabled = this.textBlock.Text != null && this.textBlock.Text.Length > 0;

            this.pasteMenuItem.IsEnabled = Clipboard.ContainsText();
        }

        #endregion
    }
}
728x90
반응형
그리드형(광고전용)
Posted by 사용자 icodebroker
TAG , ,

댓글을 달아 주세요