アプリケーションで Windows イベントを処理する必要がありWPF
ます。そのために、次のようにセットアップ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
クラス) にある必要があります。my が処理しようとしているメッセージは、WndProc
基本的にこのクラスに Lparam と Wparam で POINT を送信するレガシー コードからのものです。その POINT を、このクラスのデータ コンテキストとして設定されている USER CONTROL のクラスと共有する必要があります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 のクラスのメンバー変数を含めることができないため、WndProc で受信したこの POINT データを UserControl のクラスと共有するにはどうすればよいですか? 考えられる 1 つの方法は、ユーザー コントロールのクラスに WndProc イベント ハンドラーを追加することでしたが、そのクラスには _SourceInitialized イベント ハンドラーが含まれていません。どうやってやるの?他に良い方法はありますか?
PS : USER CONTROLS のクラスのすべてのメンバーは非静的であり、MVVM 構造に従おうとしています。