Window/WPF
[ WPF ] 윈도우 이벤트
열ㅇl
2010. 7. 11. 15:26
윈도우 이벤트를 가로채기 위해서 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;