سؤال

يعرض MSDN ما يلي لـ CreatePatternBrush:

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

سؤالي هو العكس.إذا كانت HBRUSH طويلة الأمد، فهل يمكنني حذف HBITMAP مباشرة بعد إنشاء الفرشاة؟أي:هل يقوم HBRUSH بتخزين نسخته الخاصة من HBITMAP؟

في هذه الحالة، أود أن يكون لـ HBRUSH نطاق كائن بينما يكون لـ HBITMAP نطاق أسلوب (الطريقة التي تنشئ HBRUSH).

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

المحلول

إن HBRUSH وHBITMAP مستقلان تمامًا.يمكن حذف المقابض بشكل مستقل تمامًا عن بعضها البعض، وبمجرد إنشائها، لن تؤثر أي تغييرات على أي من الكائنين على الآخر.

نصائح أخرى

تحتوي الفرشاة على نسختها الخاصة من الصورة النقطية.يمكن رؤية ذلك بسهولة عن طريق حذف الصورة النقطية بعد إنشاء الفرشاة ثم استخدام الفرشاة (يعمل بشكل جيد)

سيؤدي استخدام GetObject لملء بنية LOGBRUSH إلى إرجاع مقبض BITMAP الأصلي في العضو lbhatch، وليس مقبض النسخة، للأسف.ويفشل استخدام GetObject على مقبض الصورة النقطية التي تم إرجاعها إذا تم حذف الصورة النقطية.

هل لدى أي شخص فكرة عن كيفية الحصول على أبعاد الصورة النقطية الأصلية من الفرشاة في هذه الحالة؟أرغب في إنشاء نسخة من فرشاة النمط على الرغم من حذف الصورة النقطية الأصلية.يمكنني الحصول على نسخة من الصورة النقطية الأصلية ببساطة عن طريق الرسم باستخدام الفرشاة، لكنني لا أعرف حجمها.حاولت استخدام SetbrushorgEx (hdc, -1,-1)، على أمل أن يتم تقليل أبعاد -1 عند تحديد الفرشاة في سياق الجهاز والحصول على القيم عندما أقوم بالاسترداد باستخدام GetBrushOrgEx.لا يعمل.

أعتقد أن الصورة النقطية يجب أن تعمر أكثر من الفرشاة:تشير الفرشاة فقط إلى الصورة النقطية الموجودة بدلاً من نسخها.

يمكنك دائمًا تجربتها ورؤية ما حدث.

أشك في أن واجهة برمجة تطبيقات CreatePatternBrush()‎ تنسخ الصورة النقطية التي تقدمها لها، نظرًا لأن HBITMAP هو:

  1. مقبض GDI، الحد الأقصى لعددها محدود، و
  2. يحتمل أن تكون كبيرة جدًا.

يميل Win32 وGDI إلى التحفظ بشأن إنشاء نسخ داخلية من بياناتك، فقط لأنه عندما تم إنشاء معظم واجهات برمجة التطبيقات الخاصة بهم (يعود تاريخ CreatePatternBrush() إلى نظام التشغيل Windows 95، والعديد من الوظائف لا تزال أقدم)، كانت الذاكرة ومقابض GDI أكثر أهمية بكثير العرض محدود عما هو عليه الآن.(على سبيل المثال، كان نظام التشغيل Windows 95 مطلوبًا للعمل بشكل جيد على نظام به ذاكرة وصول عشوائي (RAM) تبلغ سعتها 4 ميجابايت فقط.)

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