在其他类中写入WinProc事件处理程序

问题描述 投票:0回答:1

我必须在WPF应用程序中处理Windows事件。为此,我需要这样设置projectName_SourceInitialized

private void FieldPlannerWnd_SourceInitialized(object sender, EventArgs e)
{
    IntPtr windowHandle = (new WindowInteropHelper(Application.Current.MainWindow)).Handle;
    HwndSource src = HwndSource.FromHwnd(windowHandle);
    src.AddHook(new HwndSourceHook(WndProc));
}

为此,我的WndProc函数必须在同一类(MainWindow类)中。我的WndProc将要处理的消息来自旧代码,这些旧代码基本上将在Lparam和Wparam中向此类发送POINT。我必须与USER CONTROL的类共享该POINT,该类设置为此MainWindow类的数据上下文。这是我的WndProc过程如下所示:

private IntPtr WndProc(IntPtr hWnd, int msg, IntPtr wParam, IntPtr lParam, ref bool handled)
{
    switch (msg)
    {
        case WM_POINTDATASENT:
        //gm.GAInfo = new GAInfo();
        PointsVector pt = new PointsVector();
        pt.X = wParam.ToInt32();
        pt.Y = lParam.ToInt32();
        //WellGeometriesView.FirstSlotLocation = pt;
        //WellGeometriesViewModel.FirstSlotLocation = pt;
        //gm.GetCoordinates(wParam, lParam);

        break;
     }

    return IntPtr.Zero;
}

由于我在主窗口的类中没有USER Control的类的任何成员变量,因此如何与UserControl的类共享Wnd​​Proc中接收到的POINT数据?我能想到的一种方法是在用户控件的类中添加WndProc事件处理程序,但是该类不包含_SourceInitialized事件处理程序。我怎样才能做到这一点?还有其他好的方法吗?

P.S:USER CONTROLS类的所有成员都是非静态的,我正在尝试遵循MVVM结构。

wpf mvvm
1个回答
1
投票

将点数据放入窗口的DataContext中,并让UserControl通过绑定或通过代码(parent.DataContext)从其父级中提取数据

© www.soinside.com 2019 - 2024. All rights reserved.