2009-05-30 81 views

回答

0

如果您正在與另一個進程通話,則需要發送和檢索Windows消息。

http://www.c-sharpcorner.com/UploadFile/thmok/SendingWindowsMessageinCSharp11262005042819AM/SendingWindowsMessageinCSharp.aspx

看一看這個鏈接:

使用窗口消息來實現全球系統鉤子在C# http://www.codeproject.com/KB/system/WilsonSystemGlobalHooks.aspx

全球系統鉤子允許應用程序攔截用於其他應用程序的Windows消息。這一直是困難的(根據MSDN,不可能)在C#中實現。本文試圖通過在C++中創建一個DLL封裝器來實現全局系統掛鉤,該封裝器將消息發佈到掛鉤應用程序的消息隊列中。

0

你想的是不能移動的窗口?將FormBorderStyle設置爲none。

+0

是的,它不應該可以移動窗口,並且已經將FormBorderStyle設置爲none。但是,另外,我希望鼠標點擊傳播到下面的窗口,我。即我希望窗口不要消耗事件。 – Christoph 2009-05-30 17:16:59

0

那麼,我仍然不太瞭解你的用例,但我會採取刺,並提供一個簡單的例子。

我假設你想從浮動窗體控制主窗體上的東西。 爲此,您需要從浮動窗體中引用主表單。您可以通過創建您的浮動形式的構造函數重載接受你的主窗體的實例,這樣做:

public FloatingForm(MainForm mainForm) 
    { 
     InitializeComponent(); 
     _mainForm = mainForm; 
    } 

浮動窗體包含一個名爲floatingFormTextBox文本框和一個名爲Button1按鈕。爲流動形成部分類看起來是這樣的:

public partial class FloatingForm : Form 
{ 
    MainForm _mainForm; 

    public FloatingForm() 
    { 
     InitializeComponent(); 
    } 

    public FloatingForm(MainForm mainForm) 
    { 
     InitializeComponent(); 
     _mainForm = mainForm; 
    } 

    private void button1_Click(object sender, EventArgs e) 
    { 
     _mainForm.DoSomething(floatingFormTextBox.Text); 
    } 
} 

主要形式只包含一個名爲mainFormTextBox文本框。當主窗體加載時,它創建一個浮動窗體的實例,將自身的引用傳遞給浮動窗體的新構造函數重載。爲主要形式的局部類看起來是這樣的:

public partial class MainForm : Form 
{ 
    FloatingForm _floatingForm; 

    public MainForm() 
    { 
     InitializeComponent(); 
    } 

    public void DoSomething(string text) 
    { 
     mainFormTextBox.Text = text; 
     this.Refresh(); 
    } 

    private void MainForm_Load(object sender, EventArgs e) 
    { 
     _floatingForm = new FloatingForm(this); 
     _floatingForm.Show(); 
    } 
} 

現在,當我把一些文字到浮動窗體的文本框,然後點擊按鈕,文本在主窗體的文本框中顯示出來。

+0

感謝您的回覆。讓我補充一些關於用例的細節:對於我來說,這兩個表單生活在兩個獨立的進程中是非常重要的 - 僅僅有兩種形式是不夠的,並且只有兩個消息泵(兩次應用程序)是不夠的。 Run()在不同的線程中,後臺的窗體應該處理所有的事件,前面的浮動窗體(在一個單獨的進程中)只是一個疊加層,它不應該處理任何鼠標事件 - 它必須讓它通過背景窗體 – Christoph 2009-05-30 21:07:55

+0

覆蓋層的目的是什麼?隔離度? – 2009-05-30 21:14:45