مع تحسين تقنيات عرض الرسوم ، تحسنت أيضًا واجهة برمجة التطبيقات لأنظمة التشغيل ، مما يوفر للمبرمجين المزيد والمزيد من الفرص لتطوير عناصر واجهة غير قياسية. لذلك كان أحد ابتكارات نظام التشغيل Windows 2000 هو النوافذ ذات الطبقات ، والتي يمكن أن تكون أجزاء منها نصف شفافة. قريبًا ، أصبح وصف واجهة برمجة التطبيقات للعمل مع النوافذ ذات الطبقات متاحًا على MSDN. ومع ذلك ، في منتديات المبرمجين ، لا يزال يتم طرح أسئلة حول كيفية جعل النافذة شبه شفافة.
ضروري
- - مترجم
- - windows sdk أو framework لبرمجة windows.
تعليمات
الخطوة 1
احصل على مقبض للنافذة التي تريد جعلها شبه شفافة. ابحث عن نافذة أو أنشئها. لإنشائه ، استخدم وظائف CreateWindow أو CreateWindowEx API أو أساليب التضمين حول هذه الوظائف التي تنتمي إلى فئات إطار العمل المستخدم. يبدو النموذج الأولي لوظيفة CreateWindow كما يلي:
HWND CreateWindow (LPCTSTR lpClassName ،
LPCTSTR lpWindowName ،
DWORD dwStyle ،
int x ،
int y ،
int nWidth
ارتفاع n
HWND hWndParent ،
HMENU hMenu ،
HINSTANCE hInstance ،
LPVOID lpParam
);
كما ترى ، تقوم الوظيفة بإرجاع مقبض إلى النافذة التي تم إنشاؤها كنتيجة للتنفيذ. إذا تم استخدام أي فئة غلاف ، فاستخدم أساليبها على الكائن المقابل للنافذة التي تم إنشاؤها للحصول على المقبض.
الخطوة 2
يمكن البحث عن نافذة باستخدام مكالمات API FindWindow و FindWindowEx و EnumWindows و EnumChildWindows و EnumThreadWindows ومجموعاتها. يمكنك الحصول على مقبض لنافذة داخل منطقة معينة باستخدام وظائف WindowFromPoint و ChildWindowFromPoint.
الخطوه 3
اضبط النافذة على النمط الموسع WS_EX_LAYERED. استخدم SetWindowLong API أو الأساليب المطابقة لكائنات المجمّع. تستبدل الدالة SetWindowLong معلومات معلمة الإطار القابلة للتعديل بشكل كامل ، لذا استخدمها مع الدالة GetWindowLong لاسترداد القيمة السابقة لمجموعة إشارات الأنماط. على سبيل المثال ، يمكن تغيير النمط على النحو التالي:
:: SetWindowLong (hWnd، GWL_EXSTYLE،:: GetWindowLong (hWnd، GWL_EXSTYLE)) ؛
هنا hWnd هو مقبض النافذة الذي تم العثور عليه كنتيجة لتنفيذ الإجراءات الموضحة في الخطوة السابقة.
الخطوة 4
اجعل النافذة شبه شفافة. استخدم SetLayeredWindowAttributes API أو أساليب فئات المجمّع. يبدو النموذج الأولي لوظيفة SetLayeredWindowAttributes كما يلي:
مجموعة BOOLLayeredWindowAttributes (HWND hwnd ،
COLORREF crKey ،
BYTE bAlpha ،
DWORD dwFlags);
الخطوة الخامسة
يجب أن تكون المعلمة hwnd للدالة عبارة عن معالج إطار صالح تم الحصول عليه في الخطوة الأولى. معلمة crKey هي مفتاح لون يستخدم لتحديد المساحات شبه الشفافة. تحدد المعلمة bAlpha قيمة الشفافية. مع قيمة معلمة bAlpha تساوي 0 ، ستكون المناطق "شبه الشفافة" شفافة تمامًا. إذا كانت المعلمة bAlpha هي 255 ، فإنها ستكون معتمة تمامًا. تحدد المعلمة dwFlags طريقة العرض الإضافي لمحتويات النافذة. عندما يتم تضمين علامة LWA_COLORKEY في قيمة dwFlags ، سيتم تحديد المناطق شبه الشفافة من النافذة بناءً على مفتاح اللون. عند تمكين علامة LWA_ALPHA ، سيتم استخدام معلمة bAlpha لتحديد قيمة الشفافية.
الخطوة 6
لجعل الإطار شبه شفاف بالكامل ، قم باستدعاء SetLayeredWindowAttributes مع قيمة معلمة bAlpha المفضلة ، علامة LWA_ALPHA ، ولكن لا توجد علامة LWA_COLORKEY. استخدم مقبض النافذة الذي تم العثور عليه كأول معلمة للوظيفة. على سبيل المثال ، لجعل النافذة نصف شفافة ، استخدم المكالمة:
:: SetLayeredWindowAttributes (hWnd ، RGB (0 ، 0 ، 0) ، 128 ، LWA_ALPHA) ؛