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" 를 명기하면 해결된다.
작성자가 댓글을 삭제했습니다.
답글삭제ㅇ
답글삭제