أخواني الأعزاء في هذا المنتدى أرجو توضيح كيفية التعامل مع الألوان في
الفيجوال سي ++ .
أي كيف أستطيع وضع لون خلفية النافذة بطريقة RGB وكذلك في بعض دوال ال API
التي تطلب لون من نوع BRUSH.
أخواني الأعزاء في هذا المنتدى أرجو توضيح كيفية التعامل مع الألوان في
الفيجوال سي ++ .
أي كيف أستطيع وضع لون خلفية النافذة بطريقة RGB وكذلك في بعض دوال ال API
التي تطلب لون من نوع BRUSH.
راجع موضوع برنامج من سيربح المليون واظن انك ستجد حلك
أقصد في ال Windows أخوي مو في ال CONSOLE .
يعني خلفية نافذة وغيرها.
يتم النعمل مع الالوان فى الوندوز على هيئة متغير DWORD
حيث DWORD هو عبارة عن 32 بت. و كما تعلم ان كل لون يمكن تمثيله
بواسطة نسب مكوناته الثلاثة RGB (red,gren,blue).
فيمكن وصف اللون بذكر المركبات الثلاثة.
مثلا الاسود = RGB(0,0,0). هذه هى تركيبة اللون الاسود و كذلك بقية الالوان.
اللون الابيض هو RGB(255,255,255)
قد تكون لاحظت ان كل قيمة للون تكون بين 0 و 255. لان كل الالوان تقع بين الابيض و الاسود.
و الان بقى لنا ان نربط ال DWORD بهذه التركيبة.
هنا اود ان استعين بصورة لكن لا اجد طريقة :).
حسنا, كما يعلم الجميع ان البايت يحوى 8 بت. ولكى نخزن متغير يتراوح بين 0و 255
يجب علينا استخدام 8 بت, يعنى بايت. و ال DWORD هو عبارة عن 4 بايت, اذن علينا
دمجهم جميعا حتى ننتج اللون فى DWORD مع مراعاة الترتيب RGB. و الان السوال
هو ما الفائده من البايت الضائع. حقيقة و على حسب علمى انه
هناك بايت ضائع عند التعامل مع الالوان فى ال GDI. لانى لم اجد متغير WORDANDHALF.
بهذه الطريقة يمكنك تمثيل الالوان.
و الان دعك من التنظير الكثير و الثرثرة. دعنا نلقى نظرة على القليل من ال Win32 API
هنا يتم تعرف اللون فى المتغير COLORREF و هو ليس الا DWORD.
و يمكننا ملؤه بالماكرو
RGB(R,G,B)
يعنى السطر التالى صحيح
COLORREF crColor = RGB(210,210,210)
و هنا ننشئ لون رمادى يشبه الرمادى المستخدم فى صناديق الحوار.
بعد الان اظن انه يمكنك التعامل مع الالوان فى جميع الدوال التابعة لل GDI.
ملاحظة:
البايت الاخير الضائع, يتم اساخدامه فى Direct3D حتى يمثل الشفافية فى الون الشئ الذى يغير اسمه الى البايت الغير ضائع :)
ألف شكر أخوس justnow على هذا الشرح الأكثر من رائع.
هذا الموضوع مغلق.