2008-11-25 113 views
9

在我正在編碼的應用程序中,我希望顯示一條警告消息,顯示一個大的半透明警告消息,而不會影響用戶的工作。基本上我會淡入消息,但從來沒有將它設置爲不透明度爲1,我希望用戶能夠點擊消息「通過」,就好像它不在那裏一樣。透明窗口(或繪製到屏幕)沒有鼠標捕獲

我已經開始使用始終在頂部窗口並將窗口樣式設置爲無,並將背景和透明度鍵設置爲白色。在這個窗口中有一個帶有大字體的標籤,其中包含警告消息(稍後我可能會重寫paint事件並使用GDI繪製消息)。我使用計時器通過撥打不透明度來淡化消息,然後再次撥回。它工作正常,因爲焦點不是從任何應用程序中偷取的,但透明表單捕獲鼠標事件,而不是捕獲鼠標事件(實際上大多數透明表單不捕獲鼠標事件,只有標籤文本)。

另外我不確定這是最佳方法,也許我應該直接畫到屏幕上。

我應該如何改進。

回答

10

重寫Form類的CreateParams屬性並確保設置了WS_EX_NOACTIVATE擴展樣式。我的是這樣:

protected override CreateParams CreateParams 
{ 
    get 
    { 
    CreateParams baseParams = base.CreateParams; 

    baseParams.ExStyle |= (int)(
     Win32.ExtendedWindowStyles.WS_EX_LAYERED | 
     Win32.ExtendedWindowStyles.WS_EX_TRANSPARENT | 
     Win32.ExtendedWindowStyles.WS_EX_NOACTIVATE | 
     Win32.ExtendedWindowStyles.WS_EX_TOOLWINDOW); 

    return baseParams; 
    } 
} 

值上面使用ExtendedWindowStyles是:

WS_EX_LAYERED = 0x00080000, 
WS_EX_NOACTIVATE = 0x08000000, 
WS_EX_TOOLWINDOW = 0x00000080, 
WS_EX_TRANSPARENT = 0x00000020, 
+1

感謝,苗條代碼。這對我很好。 – 2008-11-26 10:17:28