إبقاء النافذة غير نشطة في المظهر حتى عند تنشيطها

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

  •  03-07-2019
  •  | 
  •  

سؤال

هل هناك طريقة لإبقاء النافذة غير نشطة، حتى لو كانت تحتوي على التركيز؟لدي شكلين (أ و ب).بعد أن يتفاعل المستخدم مع A، أقوم بنقل التركيز مرة أخرى إلى B.نتيجة عمليات نقل التركيز (ينقر المستخدم على A، ثم يتم نقل التركيز مرة أخرى إلى B) هو أن النموذج A يومض من نشط إلى غير نشط.يبدو هذا قبيحًا (خاصة في نظام التشغيل Vista حيث يحصل A على ظل أكبر للحظات).كيف يمكنني أن أجعل مظهري غير نشط حتى لا يحدث هذا الوميض؟

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

المحلول

وأخيراً وجدت الجواب!

تحذير: لا تسيء استخدام تقنية هذه الإجابة. سيؤدي القيام بذلك إلى إرباك المستخدمين وسيضر بتجربة الحوسبة بشكل عام.يمكن أن تكون التقنية الموضحة أدناه مفيدة جدًا في ظل ظروف معينة (مثل تنفيذ سلوك يشبه التحسس الذكي)، ولكن لو سمحت كن حكيما في استخدامك لها.

ال WM_NCACTIVATE يتم إرسال الرسالة إلى النافذة لتغيير حالة المنطقة غير التابعة لها (أي.الحدود وشريط العنوان) إلى غير نشط أو نشط.يشير wParam الخاص بالرسالة إلى ما إذا كانت الحالة ستكون غير نشطة أم نشطة.إذا كانت قيمة wParam صحيحة (القيمة 1)، فستبدو النافذة نشطة.إذا كانت قيمة wParam خاطئة (القيمة 0)، فستبدو النافذة غير نشطة.لإجبار النافذة على البقاء إما غير نشطة أو نشطة، قم بتجاوز wParam عن طريق تعيينها على القيمة المقابلة (0 أو 1)، وستكون جاهزًا تمامًا!

private const int WM_NCACTIVATE = 0x0086;

protected override void WndProc(ref Message m)
{
    if (m.Msg == WM_NCACTIVATE)
    {
        // Use this to make it always look inactive:
        m.WParam = (IntPtr)0;

        // Alternately, use this to make it always look active:
        m.WParam = (IntPtr)1;
    }

    base.WndProc(ref m);
}

نصائح أخرى

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

لا يمكن أن أقول لكم من ما تصفون هو التركيز التحول مثل:

A-> B
B-> A-> الكبرى تشكيلة متنوعة المستخدم> B
B-> A

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

لتحقيق ذلك، فإنه يبدو وكأنه تحتاج إلى استدعاء b.AddOwnedForm(a) فقط قبل أن تظهر a.

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