-
HwndSource source =PresentationSource.FromVisual(
this
)
as
HwndSource;
-
if
(source !=
null
) source.AddHook(WndProc);
-
HwndSource source =HwndSource.FromHwnd(
new
WindowInteropHelper(
this
).Handle);
-
if
(source !=
null
) source.AddHook(WndProc);
注:两种方法中的this可换成Visual对象。
然后就可以HwndSourceHook委托的WndProc方法了:
在Visual的句柄创建后(如OnLoad、OnSourceInitialized代码里),使用下面方法:方法一:[csharp] view plaincopyHwndSource source =PresentationSource.FromVisual(this) as HwndSource; if(source != null)
当使用winform启动
WPF
应用时,传参比较简单,直接使用进程之间传递参数,若winform向已启动的
WPF
中传参数,则使用
消息
处理
winform程序,本例使用控制台
实体类 namespace ConsoleApplication1
[StructLayout(LayoutKind.Sequential)]
public struct Entity
在上篇文章中,我有提到过
WndProc
中可以
处理
所有经过窗体的事件,但是没有具体的来说怎么可以
处理
的。
其实,在
WPF
中,要想利用
WndProc
来
处理
所有的事件,需要利用到SourceInitialized Event,首先需要创建一个HwndSource对象,然后利用其AddHook方法来将所有的windows
消息
附加到一个现有的事件中,这个就是
WndProc
。
void WSIni...
在学MFC 的第一课就是讲windows的
消息
机制,其中这一部分是通过
WndProc
这个函数来完成的,用一个
消息
循环来捕捉
消息
。虽然在
WPF
里 没有
WndProc
这个函数,但是提供了另一种方法来完成挂钩的功能。在WinForm 里 只需重载
WndProc
函数便可完成
消息
响应。
WinForm:
private const int WM_SIZEING = 0x0
在
WPF
中,要想利用
WndProc
来
处理
所有的事件,需要利用到SourceInitialized Event,首先需要创建一个HwndSource对象,然后利用其AddHook方法来将所有的windows
消息
附加到一个现有的事件中,这个就是
WndProc
。
protected override void OnSourceInitialized(EventArgs e)
C#
wpf
实现窗体间
消息
传输
本文介绍
WPF
使用windows 自带的User32.dll中的SendMessage和FindWindow函数实现两个窗体应用程序的
消息
传递。
一、导入外部dll
User32.dll在c盘windows\system32目录下,将它复制到VS的
wpf
项目中bin\debug文件夹下即可。WM_COPYDATA作为系统
消息
。
//定义一个全局变量作为
消息
,WM_COPYDATA
消息
的标识符为0x004A
public const int WM_COPY
WndProc
(Window Procedure)是在Windows中用于
处理
窗口
消息
的函数。在
WPF
中,
WndProc
可用于
处理
原生Windows
消息
或自定义
消息
,因为
WPF
窗口
是对原生Windows
窗口
的封装。
可以通过使用HwndSource类的AddHook方法来向
WPF
窗口
添加
WndProc
钩子。具体来说,可以创建一个委托并将其传递给AddHook方法,该委托将在
窗口
接收
消息
时被调用。可以在委托内部实现
WndProc
方法,并根据需要
处理
不同的
消息
。
以下是一个简单的示例代码,说明如何在
WPF
中使用
WndProc
处理
消息
:
```csharp
private IntPtr
WndProc
(IntPtr hwnd, int msg, IntPtr wParam, IntPtr lParam, ref bool handled)
//
处理
自定义
消息
,例如 WM_MY_CUSTOM_MESSAGE
if (msg == WM_MY_CUSTOM_MESSAGE)
//
处理
自定义
消息
handled = true;
return IntPtr.Zero;
// 调用默认的
WndProc
方法
处理
其他
消息
return IntPtr.Zero;
private void Add
WndProc
Hook()
HwndSource hwndSource = PresentationSource.FromVisual(this) as HwndSource;
hwndSource.AddHook(new HwndSourceHook(
WndProc
));
需要注意的是,如果使用
WndProc
处理
原生Windows
消息
,必须非常小心,避免出现安全问题或不稳定性问题。因此,需要在使用
WndProc
时仔细评估其潜在风险,并遵循最佳实践。