在WPF中,可以通過重寫窗體類的方法來自定義窗體消息。以下是一個示例:
public class CustomWindow : Window
{
// 重寫WndProc方法處理窗體消息
protected override void OnSourceInitialized(EventArgs e)
{
base.OnSourceInitialized(e);
HwndSource hwndSource = PresentationSource.FromVisual(this) as HwndSource;
if (hwndSource != null)
{
hwndSource.AddHook(new HwndSourceHook(WndProc));
}
}
private IntPtr WndProc(IntPtr hwnd, int msg, IntPtr wParam, IntPtr lParam, ref bool handled)
{
// 自定義處理窗體消息的邏輯
switch (msg)
{
case WM_CLOSE:
// 自定義處理窗體關閉的邏輯
MessageBox.Show("窗體關閉消息被攔截!");
handled = true;
break;
}
return IntPtr.Zero;
}
// 定義窗體消息常量
private const int WM_CLOSE = 0x0010;
}
<local:CustomWindow x:Class="MyApp.MainWindow"
xmlns:local="clr-namespace:MyApp"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="450" Width="800">
<!-- 窗體內容 -->
</local:CustomWindow>
通過重寫WndProc方法和處理窗體消息常量,可以自定義窗體的消息處理邏輯,實現更靈活的窗體行為。