اسم المؤلف Qi Gao المصدر الأصلي للمقالة المقدمة الأصلية في الآونة الأخيرة، كان أحد الأشخاص مسؤولاً عن مهمة تطوير محطة للطاقة الكهرومائية في مكان ما في قويتشو. عند تنفيذ وحدة نظام مراقبة الواجهة، لا بد لي من استخدام العديد من المفاتيح والأشياء الأخرى تمثل حالة التشغيل الحالية للمعدات، بعد البحث على الإنترنت، وجدت أنه لا توجد أشياء جيدة في هذا المجال نظرًا لأنه لا يتضمن التحكم، فقد استخدمت طريقة اشتقاق فئة CSTATIC لتعيين رسالة WM_PAINT لتنفيذها. الوظيفة سأقوم بنشر هذا الفصل والصور الآن، على أمل المساعدة في التحكم الصناعي وأولئك الذين يدرسون هذا المجال.
يتم تنفيذ التحكم في النص في شكل خرائط خلفية، أي أنه يتم تنفيذ عمليات خريطة مختلفة في ظل ظروف مختلفة لتمثيل حالة تشغيل الجهاز ديناميكيًا نظرًا لأنه يمثل هذه المرة حالة المفتاح، فقد استخدمت صورتين للاستبدال إذا كان هناك العديد من المواقف، فيمكن توسيعها واستخدامها. تم رسم الصورة بواسطتي باستخدام لوحة رسم WINDOWS. إذا قام أي شخص برسم نمط تبديل أكثر جمالاً، فيرجى إبلاغي بذلك (^_^، مستواي محدود).
البرنامج بسيط للغاية، الكود التقريبي هو كما يلي:
باطلة CSwitchStatic::OnPaint()
{
CPaintDC dc(this);// سياق الجهاز للرسم
// TODO: أضف رمز معالج الرسائل الخاص بك هنا
كريكتريكت؛
GetClientRect(&rect);
CDC *mdc=new CDC;
mdc->CreateCompatibleDC(&dc);
HBITMAP hbitmap;
التبديل (هذا->m_SystemMetric)
{
الحالة STYLE_ONE:
إذا (!هذا->bSwitchOn)
hbitmap=::LoadBitmap(::AfxGetInstanceHandle(),MAKEINTRESOURCE(IDB_SWITCHOFF));
آخر
hbitmap=::LoadBitmap(::AfxGetInstanceHandle(),MAKEINTRESOURCE(IDB_SWITCHON));
استراحة؛
الحالة STYLE_TWO:
إذا (!هذا->bSwitchOn)
hbitmap=::LoadBitmap(::AfxGetInstanceHandle(),MAKEINTRESOURCE(IDB_SWITCHOFF1));
آخر
hbitmap=::LoadBitmap(::AfxGetInstanceHandle(),MAKEINTRESOURCE(IDB_SWITCHON1));
استراحة؛
تقصير:
إذا (!هذا->bSwitchOn)
hbitmap=::LoadBitmap(::AfxGetInstanceHandle(),MAKEINTRESOURCE(IDB_SWITCHOFF));
آخر
hbitmap=::LoadBitmap(::AfxGetInstanceHandle(),MAKEINTRESOURCE(IDB_SWITCHON));
استراحة؛
}
mdc->SelectObject(hbitmap);
dc.BitBlt(rect.left,rect.top,rect.Width(),rect.Height(),mdc,0,0,SRCCOPY);
ReleaseDC(mdc);
::DeleteObject(hbitmap);
// لا تتصل بـ CStatic::OnPaint() لرسم الرسائل
}
طريقة الاستدعاء هي كما يلي:
لقد قمت بإعداد وضعين لتشغيل التبديل ونمطين لحالة التبديل في البرنامج. يوفر البرنامج طريقة إعداد ديناميكية:
الافتراضي هو SwitchOff إذا كنت تريد تغيير الحالة، يمكنك استخدام الكود التالي:
SetSwitchState(TRUE);
إذا أردنا تغيير نمط عرض التبديل، يمكننا استخدام الكود التالي:
SetSwitchStyle(STYLE_TWO);//النمط الثاني
SetSwitchStyle(STYLE_ONE);//النمط الأول
يوسع