2010-05-19 170 views
0

我正在使用兩個Windows窗體來處理C#應用程序。兩種形式都是全屏顯示,一種形式作爲透明覆蓋層位於另一種形式之上。底部表單包含一個網頁瀏覽器(也是全屏)。我正在跟蹤透明疊加窗體上的觸摸輸入,以捕獲手勢並在屏幕上繪製按鈕和其他控件。我需要做的是將覆蓋表單在其WndProc函數中獲得的所有窗口消息發送到下面的表單(或表單中的Web瀏覽器控件,因爲基本上所有較低的表單都被用於包含)。C#將WndProc從窗體傳遞到另一個窗體

基本上我只需要處理覆蓋層上的手勢,所有的鼠標消息仍然需要傳輸到Web瀏覽器來提供某些功能。

我已經嘗試過只是調用低層窗體的WndProc方法給出覆蓋層消息的樸素方法。 (同樣,我試着將它傳遞給瀏覽器控制窗口的WndProc)。這兩種方法都不起作用。我也試着簡單地將Message對象的HWnd參數交換爲下層窗體/瀏覽器的句柄,同時嘗試這樣做,但這也不起作用。

那麼,任何人都可以想到更多的方法來嘗試,或者可能是窗體之間傳遞窗口消息的正確方法?

謝謝, 亞歷克斯

+0

你爲什麼限制自己只WndProc的消息? – volody 2010-05-19 17:34:38

+0

這就是我目前正在接收觸摸輸入的方式。然而,觸摸輸入被視爲鼠標輸入,我相信,所以我想另外一個問題是將所有鼠標事件傳遞到較低表單的簡單/乾淨的方法。 – Alex 2010-05-19 17:40:51

回答

0

如何創建一個主表,並讓這兩種形式是子窗體。將子窗體中的事件委託給主人,並讓主人處理您想要處理的任何事件。

+0

您是在談論以某種形式使用MDI還是僅僅是一個架構建議?如果它是MDI,那麼我已經嘗試過了,MDI子窗體不能透明,看起來似乎。 如果你在談論架構,那麼這已經是我正在做的事情了。疊加窗體是主窗體,它具有瀏覽器窗體作爲其中的對象。 – Alex 2010-05-19 18:01:53

+0

是的,有了MDI,你就沒有透明度了。 – volody 2010-05-19 18:06:55

+0

不幸的是透明度是必要的覆蓋形式,因爲它的真正目的是爲觸摸輸入提供一個墊子進行處理,然後操縱下面的瀏覽器的內容。 – Alex 2010-05-19 18:16:53

0
var topForm = new Form1(); // top form 
var browserForm = new Form2(); // bottom form with webbrowser control 

鼠標點擊事件添加到Form1

private void Form1_MouseClick(object sender, MouseEventArgs e) 
{ 
    browserForm.DoClick(e.X, e.Y); 
} 

創建自定義WebBrowserEx控制過程鼠標點擊事件 這個控件添加到窗體2

namespace WindowsFormsApplication1 
{ 
    public class WebBrowserEx: System.Windows.Forms.WebBrowser 
    { 
     public void DoClick(int x, int y) 
     { 
      base.OnMouseClick(new MouseEventArgs(MouseButtons.Left, 1, x, y, 0)); 
     } 
    } 
} 
+0

檢查如何在代碼中模擬鼠標和鍵盤事件 http://msdn.microsoft.com/en-us/library/ms171548.aspx – volody 2010-05-19 18:42:04

相關問題