سؤال

النظر في النوافذ tooltips نافذة تلميح من الدرجة، أرى أنها تقسم ظلها قطرة الخارج مستطيل تلميح نافذة الفعلي.

استخدام spyxx. - يمكنني الحصول على Loadtip's Window Arip، وأنماط الطبقة:

Rectangle:     (440, 229)-(544, 249), 104x20
Restored Rect: (440, 229)-(544, 249), 104x20
Client Rect:   (0, 0)-(104, 20), 104x20

ستلاحظ أن الظل الإسقاط الذي تراه جسديا الخارج النافذة التي يتم رسمها. كيف يمكنني رسم الظل في الخارج حول نافذتي، في حين أن تكون الخارج نافذتي؟

ملحوظة: لا يتم رسم الظل باستخدام المعيار CS_DROPSHADOW نمط الطبقة. لقد أكدت هذا تجريبيا، ويمكن أن أرى أيضا أسلوب الفصل للنافذة spyxx.; ؛ لا يستخدم CS_DROPSHADOW:

Windows Styles:     94000001

    WS_POPUP        80000000
    WS_VISIBLE      10000000
    WS_CLIPSIBLINGS  4000000
    TTS_ALWAYSTIP          1

Extended Styles:    00080088

    WS_EX_LAYERED      80000
    WS_EX_TOOLWIN         80
    WS_EX_TOPMOST          8

فكيف يمكنني رسم خارج نافذتي؟

ملحوظة: محاولة السحب على سطح المكتب DC خارج. من جريج Schechter إعادة توجيه تطبيقات GDI، DirectX، و WPF:

الرسم والقراءة من الشاشة - Baaaad!

وأخيرا، نظرا لأننا في موضوع إعادة التوجيه، فإن الممارسة الخطرة واحدة لا تتكاثر إلى الشاشة، إما من خلال استخدام GetDC (NULL) والكتابة إلى ذلك، أو محاولة قيام خطوط XOR المطاطية، وما إلى ذلك، هناك اثنان أسباب كبيرة أن الكتابة إلى الشاشة سيئة:

انها باهظة الثمن ... الكتابة إلى الشاشة نفسها ليست باهظة الثمن، ولكنها مصحوبة دائما تقريبا بالقراءة من الشاشة لأن المرء عادة يقوم عادة بعمليات كتابة قراءة مثل XOR عند الكتابة إلى الشاشة. القراءة من سطح ذاكرة الفيديو مكلفة للغاية، تتطلب المزامنة مع DWM، وأكشاك أنابيب GPU بأكملها، وكذلك أنبوب تطبيق DWM.
لا يمكن التنبؤ بها ... إذا تمكنت بطريقة ما في الوصول إلى الأساسي الفعلي والكتابة إليها، فلا يمكن أن تكون هناك إمكانية تنبؤية كمطول ما كتبته إلى الأساسي ستبقى على الشاشة. نظرا لأن Uce لا يعرف عن ذلك، فقد يتم مسحه في تحديث الإطار التالي، أو قد يستمر لفترة طويلة جدا، اعتمادا على ما يجب تحديثه على الشاشة. (نحن حقا لا نسمح بالكتابة المباشرة إلى أي حال، لذلك السبب بالذات ... إذا حاولت الوصول إلى DirectDraw Modery، على سبيل المثال، سيقوم DWM بإيقاف تشغيله حتى يتم تطبيق تطبيق الوصول)

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

المحلول

لا يمكنك رسم خارج نافذتك بالطريقة التي تصفها.

إذا قمت بالنقر بزر الماوس الأيمن فوق سطح المكتب، فانتقل إلى الخصائص / المظهر / التأثيرات وإلغاء تحديد "إظهار الظلال تحت القوائم" ... لن يكون لديك الظل.

خلاصة أسفل هو أن هذا منتج لمدير النافذة وليس البرنامج الخاص بك.

نصائح أخرى

س: كيف ترسم خارج نافذة واحدة؟ ج: رسم الداخل اخر نافذة او شباك!

أول شيء يجب ملاحظته هو أن فئة Tooltip فعلا هل استخدم ال CS_DROPSHADOW أسلوب - ولكن لاحظ أن هذا هو صف دراسي نمط، وليس نافذة او شباك نمط، لذلك عليك أن تنظر إلى فصل علامة التبويب في مربع حوار الخصائص Spy ++ للعثور عليه. سترى أن tooltips_class32 النوافذ لديها بالفعل هذا - وعدد قليل من الآخرين.

ولكن هذا يؤدي فقط إلى السؤال التالي - كيف الذي - التي الشغل؟ حسنا، يبدو أن Windows ينفذ هذا من خلال إنشاء مساعد HWND لرسم الظل - يفترض أنه خلق نافذة منبثقة أخرى بنفس الحجم والشكل كظلم، وملءه باللون الرمادي، ووضعه مباشرة أسفل النافذة الرئيسية، والوضع كما WS_EX_LAYERED. نافذة بحيث يمكن أن يكون الظل شفافا ويخسر حول الحواف باستخدام مزج ألفا. وليس هناك شيء لمنعك من استخدام نفس التقنيات أو مماثلة لنفسك إذا كنت ترغب في إضافة نوع مختلف من تأثير الظل إلى أحد نوافذك الخاصة.

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

--

الآن، إذا حاولت العثور على أحد نوافذ الظل المساعد هذه في تجسس ++، فلن تجد كثيرا. على عكس. tooltip_class32 نوافذ الظل التي طالما أنطوما، والتي تخفوها لفترة طويلة وعصرها كما هي الحاجة، هي مخلوق أكثر تعاوسا: يتم إنشاؤها فقط لفترة طويلة حسب الحاجة، لذلك يجب عليك تحديث التجسس ++ أثناء وجود قائمة أدوات تلميحية أو منبثقة أو غيرها من النافذة باستخدام الحاضر الظل - وهذا أمر صعب، نظرا لأن معظم تلميح الأدوات والأقواس ستختفي بمجرد نقل الماوس للتبديل إلى Spy ++. ولكن اتضح أن تلميحات الأدوات على شريط أدوات التجسس ++ سوف تلتصق حولها: لذا بدء تشغيل التجسس ++، تحوم فوق عنصر في شريط الأدوات، وضرب F5 لتحديث شجرة HWND أثناء وجود تلميح الأدوات والظل. قم الآن بالتمرير لأسفل، ويجب أن ترى hwnds المرئية الثالثة والرابعة في الشجرة هي تلميح الأدوات نفسها، وبعد ذلك، SysShadow نافذة او شباك. لسوء الحظ، نظرا لأن Tooltip و Shadow قد اختفت الآن، إذا حاولت الحصول على مربع حوار الخصائص لتلك HWND، فستحصل على مربع حوار خاصية فارغة مع رسالة "نافذة غير صالحة". إذا كنت ترغب حقا في الكوخ ومعرفة كيفية عمل Sysshadow، ما هي الأنماط التي يستخدمها نفسها وهلم جرا، يمكنك إنشاء تطبيق مستهدف مع منبثق طويل الأجل يستخدم CS_DROPSHADOW يمكنك بعد ذلك استكشافها في جاسوس ++ في أوقات الفراغ.

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

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

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