5

私が今持っているもの: C# の私のアプリは半透明で、winapi イベントをキャッチしません。これを使用して、ブラウザが表示するものの上に情報を重ねます。これは私のコードです:

int exstyle = GetWindowLong(this.Handle, GWL_EXSTYLE);
exstyle |= WS_EX_TRANSPARENT;
SetWindowLong(this.Handle, GWL_EXSTYLE, exstyle);

IntPtr hwndf = this.Handle;
IntPtr hwndParent = GetDesktopWindow();
SetParent(hwndf, hwndParent);

しかし今、すべてのイベントをアプリ ウィンドウ (上部が半透明) と Web ブラウザー (アプリの下) の両方に送信したいと考えています。たとえば、クリックすると、両方のウィンドウが上にあるかのようにクリックが機能します。それを行う唯一の方法は、すべてのイベントをキャッチしてから下のウィンドウに転送することだと思いますが、それを行う方法はありますか? ウィンドウライブラリとしてwinformsを使用しています。


通常はイベントを消費してから、下にあるウィンドウに転送したいので、私が今やっていることはそれほど重要ではありません。これは、私が現在 WS_EX_TRANSPARENT で行っていることとは完全に異なるものです。これのポイントは、両方のウィンドウでコンテンツを同時にドラッグすることです。それを行うより良い方法があれば、私はそれを聞いてうれしいです.


少なくとも私が必要とするのは、ドラッグ イベントを両方のウィンドウに転送し、他のすべてのイベントを下にあるウィンドウ (私の制御下にない) に転送することです。したがって、ウィンドウを WS_EX_TRANSPARENT (下にあるウィンドウにイベントをパススルーさせる) のままにして、単にグローバル フックをインストールしてドラッグ イベントを受け取る方が簡単でしょうか? どう思いますか?

ところで、私は Winapi の経験がないので、解決策は明白かもしれません。

4

2 に答える 2

0

基になるフォームがイベントを処理した後に、イベントの転送を試みることができます。何かのようなもの

 protected override void OnDragOver(DragEventArgs drgevent)
 {
     base.OnDragOver(drgevent);
     MyControl.ForwardDragEvent(drgevent);
 }

MyControl で:

public void ForwardDragEvent(DragEventArgs drgevent)
{
     base.OnDragOver(drgevent);
     //Or call your own method to handle the event
}

これを使用してスクロールイベントを転送しましたが、私の場合、イベントを処理したコントロールは 1 つだけでした..

于 2013-09-26T08:26:05.273 に答える
0

フォームで WndProc をオーバーロードするか、代わりに呼び出して、独自のフォームに送信された Windows イベントをキャプチャできます。user32!GetMessage

user32!PostMessageまたはAPIを介して他の Windows フォームにメッセージを送信できますuser32!SendMessage( msdn のPostMessage 関数を参照)。

于 2012-09-06T12:02:45.823 に答える