我有以下代碼來拖動窗體,並使其拖動時透明。問題在於它閃爍並且沒有順利拖動。我在表格上有一張照片,不知道這是什麼原因造成的。我怎樣才能讓它不閃爍。如果我刪除不透明度,那麼它會變得很快/很平滑。拖動不透明窗體?
[DllImportAttribute("user32.dll")]
public static extern int SendMessage(IntPtr hWnd, int Msg, int wParam,
int lParam);
[DllImportAttribute("user32.dll")]
public static extern bool ReleaseCapture();
public void Drag(MouseEventArgs e)
{
if (e.Button == MouseButtons.Left)
{
this.Opacity = 0.9;
ReleaseCapture();
SendMessage(Handle, 0xA1, 0x2, 0);
this.Opacity = 1;
}
}
private void Body_MouseDown(object sender, MouseEventArgs e)
{
Drag(e);
}
一般來說,GDI(Windows窗體基於什麼)不能很好地處理不透明度,它必須將渲染產品的所有像素與下面的所有圖層混合。 WPF(因爲它依賴於Direct X,它可以在硬件級別執行此操作)通常會使這種操作更好。 – casperOne
Gocha。所以沒有辦法解決這個問題? – Kristian
您可以嘗試將'this.Opacity = 1;'移動到窗體的'ResizeEnd',當您停止拖動窗體時調用該窗體。讓我知道這是否有幫助。請讓我們知道您在此表單上有多少個控件。還請寫出您使用的Windows版本(我認爲在Vista或Win7上可能看不到閃爍)。 –