بسم الله الرحمن الرحيم
السلام عليكم ورحمة الله وبركاته وبعد
اخواني الأعزاء تحية طيبة
أولاً سؤالي يدور حول الـ CPalette:
فكما تعلمون أن CPalette تنشئ لوحة ألوان بإختيار ألوان معينة ,إلى هنا متفقين
ولكن المشكلة التي لدي :
هي أني أقوم بإنشاء كائن CPalette بشكل سليم بإذن الله تعالى ولكن كيف أقوم بعرض هذا
الـPalette في منطقة معينة على سبيل المثال
لو وضعت على Dialog أداة Picture لتمثل المنطقة التي تعرض الـPalette
وقمت بإحضار DeviceContext تبع المنطقة ولنفرض أن ID تبع الصورة هو IDC_PIC
وعليه فإني سأقوم بالتالي لإحضار DC تبع المنطقة :
CStatic* pStatic = (CStatic*)GetDlgItem(IDC_PIC); CDC* pDC = pStatic->GetDC();
والأن وبعد أن أحضرت DC تبع المنطقة المراد عرض لوحة الالوان فيها فإني سأقوم بإنشاء كائنCPalette
والذي سأضعه في المنطقة على النحو التالي :
// Create system palette: int nColors = 256; // Use 256 first entries UINT nSize = sizeof(LOGPALETTE) + (sizeof(PALETTEENTRY) * nColors); LOGPALETTE *pLP = (LOGPALETTE *) new BYTE[nSize]; pLP->palVersion = 0x300; pLP->palNumEntries = (USHORT) nColors; ::GetSystemPaletteEntries (pDC->GetSafeHdc() , 0, nColors, pLP->palPalEntry); CPalette palSys; palSys.CreatePalette (pLP);
وبعد أن أنشئ الكائن يجب أن أختاره في DC وعليه سأكتب الكود التالي :
CPalette* pPS = pDC->SelectPalette(&palSys,FALSE);
وبعد هذه الخطوات يأتي السؤال وهو أني عجزت عن عرض كائن CPalette في المنطقة المحددة وربطهم
مع بعضهم البعض مع أني قمت بجلب DeviceContext تبع المنطقة وقمت بإنشاء كائن CPalette الذي يحتوي على الألوان
المطلوبة فما هي حلقة الوصل بينهم أو الحلقة المفقودة
ومن لديه الجواب أرجوا أن لايبخل علي وأنا أنتظر على احر من الجمر
أخوكم عبدالله عيد المحمادي