728x90
728x90

WPF 8

WPF, 윈폼] 마우스 커서 위치에 있는 픽셀의 색상값(RGB) 구하는 방법

필요에 의해서 특정 지점에서의 RGB값으로 구성된 색상값을 구하고 싶어서 간단한 유틸리티를 만드는데, 특정 지점에서의 색상값을 구하는 방법을 찾아봤다. MSDN이랑 스택오버플로우를 뒤져보니까 GetPixel이라는 해당 픽셀에서의 색상값을 구하는 윈도우 API가 있다. [DllImport("user32.dll", SetLastError = true)] public static extern IntPtr GetDesktopWindow(); [DllImport("user32.dll", SetLastError = true)] public static extern IntPtr GetWindowDC(IntPtr window); [DllImport("gdi32.dll", SetLastError = true)] publ..

[WPF] 프로그램 실행 시 시작 윈도우 변경하는 방법

WPF에서 프로그램을 실행했을 때 가장 먼저 뜨는 윈도우(창)을 변경하고 싶을 때가 있다. 아래 예시를 보자. 처음 WPF 프로젝트를 생성했을 때는 기본적으로 생성된 MainWindow가 프로그램 실행 시 시작 윈도도우로 설정된다. 이 시작 윈도우를 MainWindow가 아니라 만들어진 MainWindow가 아닌 AuthWindow라는 윈도우로 바꾸고 싶다면 App.xaml을 열어보자. App.xaml에 어떠한 변경 사항도 없었다면, Application 태그에서 StartupUri가 MainWindow로 지정된 것을 볼 수 있다. 이것이 프로그램 실행 시 시작 윈도우를 지정하는 부분이다. 이 StartupUri를 AuthWindow.xaml로 변경하면 된다.

[WPF] Grid 레이아웃과 Col, Row를 이용해서 WPF의 윈도우 레이아웃 짜기

개인적으로 WPF를 이용해서 간단한 윈도우 응용 프로그램을 만들어 보고 있는데, 여기서는 레이아웃을 XAML로 작성한다. 국내에는 WPF 관련한 자료가 많은 편은 아니고, 닷넷은 아무래도 MSDN 문서가 많은 걸 알려주어서 애용하는 편이다. https://docs.microsoft.com/ko-kr/dotnet/framework/wpf/controls/how-to-create-a-grid-element? Grid 레이아웃을 다루는 기초적인 방법으로, Grid.RowDefinitons, Grid.ColDefinitions을 이용해서 행과 열의 개념을 가진 표(Table)처럼 레이아웃을 다루는 방법이 있다. 픽셀(px)를 이용하는 절대적인 크기가 아니라 상대적인 크기 비율만 조정하고 싶을 때는 *을 이용한다..

Visual Studio 2017에서 설치 파일 만드는 방법

프로젝트 릴리즈 버전을 올리려고 하다 보니까 설치 파일이 필요해졌는데, 올릴 방법이 막막했다.다른 게시물들이나 이런 곳에서는 2017 이전의 버전으로 해서 그런지 기본적으로 기타 프로젝트라는 카테고리가 따로 존재해서 Setup Project를 만들 수 있었는데, 2017부터는 아무리 찾아봐도 그런 게 없다. 심지어 설치 시 누락된 건가 싶어 인스톨러를 실행해봤는데, 그건 아니었다. https://marketplace.visualstudio.com/items?itemName=VisualStudioClient.MicrosoftVisualStudio2017InstallerProjects Visual Studio 2017에서는 Setup Project를 기본 지원하지 않는다. 다만, 마이크로소프트에서 공식 확장..

[WPF] Keyboard 클래스

Keyboard 클래스에서 키보드 관련 이벤트와 메서드, 키보드에 관련된 속성을 제공. 아래 이벤트를 적절히 이용해서 키보드 관련 처리를 하는 것이 좋음. 컨트롤이 포커스를 받았을 때PreviewGotKeyboardFocusGotKeyboardFocus 컨트롤이 포커스를 잃었을 때PreviewLostKeyboardFocus,LostKeyboardFocus 컨트롤이 논리적 포커스를 받았을 때GotFocus 컨트롤이 논리적 포커스를 잃었을 때LostFocus 키가 눌렸을 때PreviewKeyDownKeyDown 키가 눌렸다 떼어졌을 때PreviewKeyUpKeyUp 컨트롤이 텍스트 입력을 받았을 때PreviewTextInputTextInput

WPF] 어플리케이션 종료 방법

Application.Current.Shutdown() 일반적인 종료 방법. Shutdown을 호출하면 어플리케이션이 종료되며, Shutdown은 WPF에서 암시적으로 호출됨. Shutdown 되는 시기는 정확히 알 수 없지만 Exit 이벤트를 이용해서 실행이 중지되는 시점을 확인하고 필요한 작업을 처리할 수 있음. System.Environment.Exit() 현재 어플리케이션의 모든 쓰레드를 중단시켜 애플리케이션을 종료시키는 방법. 어플리케이션을 즉시 죽일 수 있음. Process.GetCurrentProcess().Kill() 강제로 프로세스를 종료시키는 방법. 강력하지만, 메인 윈도우에 종료 요청을 내리는 방식으로, 즉각적으로 앱에 종료를 요청하지 않아 시간 지연이 발생할 수도 있음.

[WPF] 다른 스레드에서 UI 스레드 쪽에 접근하기

1. 많은 UI 구성 요소에서 호출 스레드가 필요하므로 해당 스레드는 STA여야 합니다. 2. "다른 스레드가 소유하고 있는 오브젝트에 현재 스레드가 접근할 수 없다"(The calling thread cannot access this object because a different thread owns it.) 최근 윈폼 프로그램을 WPF로 바꾸는 과정에서 주기적으로 창을 호출하는 과정에서 위 오류가 발생했다.윈폼에서는 이런 일이 없었지만 WPF에서는 UI 스레드와 그렇지 않은 스레드로 나누고 있어 이런 오류가 발생한다.이럴 때는 Dispatcher.Invoke를 이용하여 해결해야 한다. Dispatcher.Invoke(DispatcherPriority.Normal, new Action(delegate..

C#WPF] 텍스트박스에 숫자만 입력하게 만들기

명백히 숫자만 들어올 텍스트 박스에는 숫자만 들어가게끔 하는 것이 좋다.유저가 숫자만 입력할 수 있는 컨트롤이라는 것을 인지하게끔 해당 컨트롤에 입력하기 전에 숫자만 입력할 수 있다는 사실을 알리는 것이 가장 효과가 크지만, 호기심으로 혹은 실수로 숫자가 아닌 것이 입력하는 경우가 있기 때문에 입력 자체를 제한하는 것이 필요할 때가 있다. WPF에서는 KeyDown 이벤트나 PreviewKeyDown 이벤트가 발생할 때 아래 메서드를 작동시켜, 해당 컨트롤에 숫자 외의 텍스트가 입력되는 것 자체를 막는 방법을 사용할 수 있다. private void TextBoxFrequency_PreviewKeyDown(object sender, KeyEventArgs e) { if (!Char.IsDigit((cha..

728x90