3

私は、人々が「画面に描画」できる Windows アプリケーションを開発しようとしています。

私は以下で開発しています:

.NET 3.5 C#/WPF

InkCanvas をホストする WPF ウィンドウがあり、どちらも背景が透明です。

ウィンドウの XAML プロパティ:

ShowInTaskbar="True" ResizeMode="NoResize" Background="Transparent"
WindowStyle="None" AllowsTransparency="True" Topmost="True"

InkCanvas プロパティ:

Background="#11FFFFFF"

次のイベント ハンドラーが必要です。 - ウィンドウ内の任意の場所を右クリック - エスケープ キーを押します。

望ましい結果: - WPF ウィンドウは他のすべてのウィンドウの上に残りますが、アクティブではなくなり、入力を受け入れなくなります - WPF ウィンドウにフォーカスすることができなくなります。ユーザーからのすべての入力は、現在フォーカスされているウィンドウに移動し、すべての上にあるインクキャンバスで wpf ウィンドウを無視する必要があります

基本的な使用例: アプリのユーザーがゲームをプレイしています。wpfウィンドウ/インクキャンバスでいくつかの矢印を停止して描画します。エスケープを押して終了します。wpf ウィンドウは、ユーザーが描いた図形を開いた状態で一番上に残り、ユーザーの入力は、開いている/フォーカスしているウィンドウに戻ります。

これまでのところ、私はこれを試しました:

MouseRightButtonUp ::   

mywindow.isenabled = false

そして私は試しました:

mywindow.IsInputMethodEnabled = false

これまでのところ機能していませんが、wpf ウィンドウはまだユーザー入力を取得し始めています。どういうわけか、このウィンドウを表示する必要がありますが、アクティブにせずに..しばらく「使用」した後でも。

アドバイスをよろしくお願いします!

4

1 に答える 1

1

WndProc (ここに示すように HwndSource の AddHook を使用) をインターセプトし、WM_NCHITTEST をインターセプトしてHTTRANSPARENTを返すことができます。ただし、それはそのスレッド内の他のウィンドウにのみ渡されます。もう 1 つのオプションは、WS_EX_TRANSPARENT 拡張スタイル ビットを設定することです。例については、この質問の回答を参照してください。

于 2012-10-18T01:03:09.290 に答える