مساعدة في الحصول على .صافي WinForms تطبيقات لدعم ويندوز فيستا ايرو زجاج

StackOverflow https://stackoverflow.com/questions/86143

سؤال

وهناك زوجين من الحيل للحصول على الزجاج الدعم .صافي الأشكال.

أعتقد أن المصدر الأصلي لهذه الطريقة من هنا: http://blogs.msdn.com/tims/archive/2006/04/18/578637.aspx

في الأساس:

//reference Desktop Windows Manager (DWM API)
[DllImport( "dwmapi.dll" )]
static extern void DwmIsCompositionEnabled( ref bool pfEnabled );

[DllImport( "dwmapi.dll" )]
static extern int DwmExtendFrameIntoClientArea( IntPtr hWnd, ref MARGINS pMarInset );


//then on form load
//check for Vista
if ( Environment.OSVersion.Version.Major >= 6 )
{
    //check for support
    bool isGlassSupported = false;
    DwmIsCompositionEnabled( ref isGlassSupported );

    if ( isGlassSupported )
        DwmExtendFrameIntoClientArea( this.Handle, ref margins );
...

//finally on print draw a black box over the alpha-ed area
//Before SP1 you could also use a black form background

أن الخطوة الأخيرة هي المسألة - أي دون ضوابط مرسومة على تلك المنطقة يبدو أيضا علاج الأسود ألفا الشفافية قناع.

فعلى سبيل المثال علامة تبويب الشريط على الطبقة منطقة شفافة النص.

هل هناك طريقة للتغلب على هذا ؟

هل هناك طريقة أسهل أن تفعل هذا ؟

التطبيقات أنا أعمل على العمل على حد سواء XP و Vista - أريد لها أن تتحلل برشاقة.هل هناك أي أفضل الممارسات هنا ؟

هل كانت مفيدة؟

المحلول

حقا ليس هناك أسهل طريقة للقيام بذلك.هذه واجهات برمجة التطبيقات لم يتم كشفها من قبل .NET Framework (حتى الآن) ، وبالتالي فإن الطريقة الوحيدة للقيام بذلك هي من خلال بعض النوع من إمكانية التشغيل المتداخل (أو WPF).

كما يعمل مع كل إصدارات ويندوز ، رمز يجب أن يكون على ما يرام منذ وقت التشغيل لا تذهب تبحث عن نقطة الدخول إلى DLL حتى كنت في الواقع استدعاء الدالة.

نصائح أخرى

DannySmurf قال ذلك.لم يكن لديك مباشرة "تمكن من" الوصول إلى واجهات برمجة التطبيقات هذه على الرغم من .NET framework (لقد جربت هذا بنفسي قبل بضعة أسابيع).

لقد انتهى به شيئا سيئا.خلقت بلدي واجهة المستخدم مع GDI+.(أزرار مدورة التسميات ، إلخ).يبدو بغض النظر عن نسخة ويندوز.الفوز.أشكال قبيحة حقا ، ولكن هذا كل ما لديك على XP < الجانبية.

أعتقد أنك نسيت أن تعيين TransparencyKey من المنطقة التي تريد أن تكون من الزجاج.من هذه المادة ،

في تطبيق نماذج Windows ، ببساطة تحتاج إلى تعيين TransparencyKey العقار إلى اللون التي لن تستخدمها في مكان آخر في التطبيق (يمكنني استخدام Gainsboro لأسباب سوف أصبح واضحا فيما بعد).ثم يمكنك إنشاء واحد أو أكثر من اللوحات التي رست على هامش النموذج الخاص بك ، تعيين لون الخلفية للفريق إلى الشفافية الرئيسية.الآن عند دعوة DwmExtendFrameIntoClientArea ، الزجاج سوف تظهر ضمن هوامش أينما كنت قد وضعت شيئا من المناسبة الشفافية الرئيسية.

أنا لا أمانع غير المدارة المكالمات - انها الإختراق باستخدام الصندوق الأسود تقليد ألفا سلوك وتأثير ذلك الحين على أسود العنصر في بعض المكونات على رأس هذه هي المشكلة.

رخيصة هاك يمكنك استخدام وضع شفافة لوحة التحكم على النموذج الخاص بك ووضع ضوابط على ذلك -- الأسود ثم الأسود.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top