윈도우 이벤트를 가로채기 위해서 HwndSource.AddHook 방법을 많이 사용하지만 이 방법은
조금 느린 반응과 HwndSource.FromHwnd 로 얻어낸 HWND 윈도우에서 발생하는 메시지만 수신된다는 단점이 있는데요.
이 단점이 없는 방법으로 ComponentDispatcher.ThreadMessage 가 있습니다.
사용법은 다음과 같습니다.
private void Window_Loaded(object sender, RoutedEventArgs e) { ComponentDispatcher.ThreadFilterMessage += new ThreadMessageEventHandler(ComponentDispatcher_ThreadFilterMessage); } void ComponentDispatcher_ThreadFilterMessage(ref MSG msg, ref bool handled) { switch (msg.message) { // To do } } |
Win32의 메시지와 동일한 값으로 필요한 메시지들을 다음과 같이 정의하여 비교하시면 됩니다.
uint WM_CREATE = 0x0001;
uint WM_DESTROY = 0x0002;
uint WM_MOVE = 0x0003;
uint WM_SIZE = 0x0005;
참고로 윈도우의 핸들은 다음과 같이 얻어 올 수 있습니다.
IntPtr hwnd = new WindowInteropHelper(this).Handle;
'Window > WPF' 카테고리의 다른 글
[ WPF ] RegisterWindowMessage 를 이용한 프로그램 간 메시지 보내기 (178) | 2010.07.21 |
---|---|
[ WPF ] BackgroundWorker (2) | 2010.07.11 |
[ WPF ] OpenCV로 캠 화면 띄우기 (3) | 2010.06.20 |
[ WPF ] 이미지 그림판 (2) | 2010.05.08 |
[ WPF ] UI 쓰레드 변경하기 (0) | 2010.05.04 |