2012-07-31 20 views
5

C#のアプリケーションは半透明でwinapiイベントを捕捉しません。クリックするごとに、ドラッグなどは別のアプリケーション(Webbrowerのような)です。私はこれを使って、ブラウザが示すものの上に情報をオーバーレイします。これは、このために私のコードです: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ブラウザの両方に、すべてのイベントを送信したいと思います。たとえば、クリックすると、クリックが両方のウィンドウで上のように機能します。私はそれを行うための唯一の方法は、すべてのイベントをキャッチし、それらを下のウィンドウに転送することだと思っていますが、それを行う方法はありますか? 私はウィンドウのlibとしてwinformsを使用します。


私が今行っていることは、通常はイベントを消費してからアンダーレイウィンドウに転送したいからです。これは、私がWS_EX_TRANSPARENTでやっていることとは完全に異なるものです。これは、両方のウィンドウでコンテンツを同時にドラッグすることです。それをやるより良い方法があれば、それを聞いてうれしいです。


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

私はWinapiの経験がありませんので、解決策は明らかかもしれません。

+0

..私の場合にはしかし、一つだけのコントロールのイベントを処理し、スクロールイベントを転送するためにこれを使用していますどのようにイベントを取得していないか理解していない...あなたは実際のウィンドウを作成していますか?または、画面に直接描画するだけです(そうしないでください)。 – tenfour

+0

@tenfour 'WS_EX_TRANSPARENT'スタイルを設定します。 – Neil

+0

@tenfourはい、私は.net winformで作成されたウィンドウを使用し、描画はwinformによって処理されるため、作成されたウィンドウです。私はスタイルWS_EX_TRANSPARENTを設定して、ウィンドウを下位ウィンドウに渡すデスクトップとしてウィンドウの親を設定します: http://www.codeproject.com/Articles/12877/Transparent-Click-Through-Forms はい、ウィンドウが直接デスクトップの子である限り、メッセージはウィンドウに表示されません。 – Deadeye

答えて

0

あなたは、Windowsのイベントをキャプチャすることができますが、フォーム上にWndProcをオーバーロードすることにより、独自のフォームを送信し、あるいはuser32!GetMessage

を呼び出すことによって、あなたはuser32!PostMessageまたはuser32!SendMessageのAPI(read PostMessage function on msdn)を介して他のWindowsフォームにメッセージを送ることができます。

0

イベントをフォローしてから、元のフォームで処理してみることができます。 MyControlとで

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

ような何か:

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

私は「私はドン

関連する問題