在WPF中处理Windows消息
生活随笔
收集整理的這篇文章主要介紹了
在WPF中处理Windows消息
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
在Winform中 處理Windows消息通過重寫WndProc方法
在WPF中 使用的是System.Windows. Sytem.Windows.Controls等名字空間,沒有WndProc函數(shù)
WPF中處理消息首先要獲取窗口句柄,創(chuàng)建HwndSource對象 通過HwndSource對象添加消息處理回調(diào)函數(shù)。
此外 WPF中沒有Handle屬性,不能直接獲得窗口的句柄
可以在構(gòu)造函數(shù)中指定消息進行消息處理的回調(diào)函數(shù),也可以在資源初始化后指定,在很多地方都可以指定。
以下是在資源初始化后指定
protected?override?void?OnSourceInitialized(EventArgs?e)????????{
????????????base.OnSourceInitialized(e);
????????????HwndSource?hwndSource?=?PresentationSource.FromVisual(this)?as?HwndSource;
????????????if?(hwndSource?!=?null)
????????????????hwndSource.AddHook(new?HwndSourceHook(this.WndProc));
????????}
注意要使用System.Windows.Interop名字空間,以上增加了一個回調(diào)委托
protected?virtual?IntPtr?WndProc(IntPtr?hwnd,?int?msg,?IntPtr?wParam,?IntPtr?lParam,?ref?bool?handled){
????switch?(msg)
????{
????????case?Win32.WM_NCHITTEST:
????????????{
????????????????Point?MouseScreenPoint?=?new?Point(lParam.ToInt32()?&?0xFFFF,?lParam.ToInt32()?>>?16);
????????????????Point?MouseWindowPoint?=?this.PointFromScreen(MouseScreenPoint);
????????????????if?(MouseWindowPoint.X?<?10?&&?MouseWindowPoint.Y?<?10)
????????????????{
????????????????????handled?=?true;
????????????????????return?(IntPtr)Win32.HTTOPLEFT;
????????????????}
????????????????
????????????????break;
????????????}
????}
????return?IntPtr.Zero;
}
這里有一個引用傳遞的參數(shù)handled ,處理消息后設(shè)置為true 告訴系統(tǒng)這個消息已經(jīng)處理過了。
轉(zhuǎn)載于:https://www.cnblogs.com/mschen/p/4312707.html
總結(jié)
以上是生活随笔為你收集整理的在WPF中处理Windows消息的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 光大咱们裸熊信用卡最低多少钱?金卡低于1
- 下一篇: 招行腾讯新闻联名信用卡免年费吗?额度怎么