2020년 7월 1일 수요일

WPF - 구조

전체적인 구조는 Application 과 Window 클래스로 구성된다

Application 은 WinApi 에서 while 문 도는 거나, WndProc 같이 메시지 처리하는 부분 등 프로그램의 전체적인 부분을 처리한다.

Window 는 우리가 보고 있는 창들을 만들고 처리한다.



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
namespace EX1
{
    public partial class MyWin : Window
    {
        public MyWin()
        {
            InitializeComponent();
        }
        private void Btn_Click(object sender, RoutedEventArgs e)
        {
            MessageBox.Show("클릭함", "굿굿");
        }
    }
}
cs

이때 사용할 Window 는 Window 를 상속받은 객체를 사용한다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
using System;
using System.Windows;
namespace EX1
{
    class App : Application
    {
        [STAThread] // 단일 스레드에서 움직일거다
        static void Main()
        {
            App app = new App();
            app.Startup += App_StartUp;
            //app.Run();
            Application.Current.Run(); // static 멤버에서 참조 => 어디서든 실행 가능
        }
        private static void App_StartUp(object sender, StartupEventArgs e)
        {
            //MyWin win = new MyWin();
            MyWin2 win = new MyWin2();
            win.Show();
        }
    }
}
cs

이 둘은 Application 이 run 하기 전에 Window 를 생성하고 show 를 호출해주면서 연결된다.
이 때 Application.Startup 은 run 이 호출 될 때 먼저 호출 되므로 아래처럼 overloading 해서 Window 를 생성해주는 것이 일반적이다.



1
2
3
4
5
6
7
8
9
<Application x:Class="proj2.App"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:proj2"
StartupUri="MainWindow.xaml" 
>
    <Application.Resources>
    </Application.Resources>
</Application>
cs

하지만 WPF 프로젝트는 컴파일러에 의해 이런 작업을 내맡길 수 있다. 
위에서 Window 을 생성하는 작업은 StartupUri="MainWindow.xaml" 를 명기하면 해결된다.





댓글 2개:

List