2014-02-16 3 views
1

Чтобы использовать Aero Glass в моем приложении C# я используюAero Glass прекрасно работает на Windows 7, но не работает на Vista,

if {DWM.DwmIsCompositionEnabled()) 
{ 
    Color c = Color.FromArgb(255, 221, 220, 220); 
    Transparency Key = c; 
    panel1.BackColor = c; 
    panel2.BackColor = c; 
    MARGINS mr = new MARGINS(); 
    mr.T = 1800; 
    IntPtr h = Handle; 
    int result = DwmExtendFrameIntoClientArea(h, ref mr); 
} 

В конструкторе:

[DllImport("dwmapi.dll")] 
public static extern int DwmExtendFrameIntoClientArea(
    IntPtr h 
    ref MARGINS p 
}; 
[StructLayout(LayoutKind.Sequential)] 
public strict MARGINS 
{ 
    public int T; 
} 

Он прекрасно работает отлично на Windows 7, но на Vista панели черные, а не прозрачные. Является ли Aero Glass на Vista отличным от одного на 7?

Редактировать: К лицу, которое -1 это сообщение, потому что вы ненавидите Vista или что? Вы знаете, как разработчик, вы должны убедиться, что ваше программное обеспечение работает как можно больше операционных систем, чтобы обеспечить его использование.

+0

Другие окна на Vista (например, «Блокнот» или «Проводник») отображаются хорошо? Другое дело: я уверен, что вы используете Windows Forms? –

+0

Да, они хорошо выглядят. Я использую Windows Forms, правильно. – CCCP

+0

Кто-нибудь знает решение? – CCCP

ответ

1

Структура MARGINS должна быть:

[StructLayout(LayoutKind.Sequential)] 
public strict MARGINS 
{ 
    public int cxLeftWidth; 
    public int cxRightWidth; 
    public int cyTopHeight; 
    public int cyBottomHeight; 
} 

DwmExtendFrameIntoClientArea должны поддерживаться в Windows Vista. Я предполагаю, что Win7 просто более терпим к усеченной структуре. Будьте очень осторожны с неуправляемыми типами данных.

+0

Все еще не работает. – CCCP

+0

Можете ли вы дать больше контекста? Что вы пробовали и как вы создали соответствующее окно? –

+0

Я добавил код, который вы мне дали, и отладил мое приложение в Vista. Он по-прежнему имеет черный цвет вместо прозрачных панелей. – CCCP