2009-11-24 38 views
1

要重建這種行爲,你需要創建一個具有以下特性的彈出形式:設置ShowInTaskBar =假,導致收盤在.NET模式窗體時閃爍,的WinForms

(1)ShowInTaskBar =假

(2)用Show方法顯示窗體並循環,直到窗體不可見。

(3)爲了在鼠標被點擊時關閉窗體,重寫OnDeactivate並將可見設置爲False。

接下來,創建另一種形式是單擊按鈕時會顯示彈出:

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As Syste 
    Using pop As New PopUp 
     pop.Visible = True 
     Do While pop.Visible 
      Application.DoEvents() 
      NativeMethods.MsgWaitForMultipleObjectsEx(0, IntPtr.Zero, 250, &HFF, 4) 
     Loop 
     Me.Activate() 
    End Using 
End Sub 

啓動項目,展開形式來填充屏幕,然後單擊按鈕,打開彈出向上。 然後點擊回到原始表格的任何位置。 大多數情況下(但並非總是如此),原始形態在再次出現之前會在一瞬間消失 - 因此會導致閃爍效應。

鑽研反射和System.Windows.Forms.Design.DropDownHolder我發現的CreateParams,解決閃爍問題如下:

createParams.Style = (createParams.Style Or -2139095040) 

不幸的是,它也讓黑色邊框的形式。 (你必須設置FormBorderStyle = System.Windows.Forms.FormBorderStyle.None才能看到這個。)

有沒有人知道這種風格除了將黑色邊框放在窗體外還有什麼作用?

我已經在谷歌搜索號碼和十六進制等價物,但沒有找到。

謝謝。

ETA:我看了一下風格常量列表pinvoke.net,但我並不聰明。

回答

3
-2139095040 = 0x80800000 = WS_POPUP | WS_BORDER 

這似乎也是邊界的罪魁禍首。

+0

謝謝,這就是現貨! – Jules