طريقة يمكن استخدامها لعرض معلومات النظام ديناميكيًا، مفيدة جدًا (^_^)
تعرض معلومات ملف تعليمات الكلمات الأساسية اسم المؤلف الأصلي، Qi Gao، والمصدر الأصلي للمقال.
مقدمة: تستخدم معظم ملفات مساعدة النظام العامة نموذجًا ثابتًا لعرض المحتوى على الواجهة عند عرض معلومات المساعدة، نظرًا لأنني مسؤول عن تطوير المشروع هذه المرة، أشعر دائمًا أنها رتيبة للغاية، لذلك في كل مرة بعد البحث موقع الويب، لقد وجدت فئة تحكم جيدة (فئة التحكم في عرض الخط)، لذلك قمت بتوسيعها وأكملت بعض وظائف العرض الديناميكية، بعد الانتهاء، يمكن عرض معلومات المساعدة المختلفة التي سيتم عرضها ديناميكيًا مثل الفيلم. سأقوم الآن بتدوين عملية الإنتاج والتعليمات البرمجية وتأثير العرض التوضيحي، وآمل أن يكون ذلك مفيدًا لأولئك الذين بحثوا في هذا المجال أو يبحثون عن طريقة جيدة.
وفي الوقت نفسه، يمكنك تعديل المعلومات النصية المعروضة في التعليمات البرمجية لهذه المقالة حسب الحاجة.
عندما يعرض النص الرئيسي ملف المساعدة، أستخدم طريقة العرض بملء الشاشة، ولكن إذا استخدمت طريقة VIEW بملء الشاشة، أشعر دائمًا أنها قبيحة جدًا، لذلك أقوم أولاً بلصق صورة خلفية على أساس كامل الشاشة في الواقع، الطريقة البسيطة هي إنشاء عنصر تحكم CSTATIC ديناميكيًا مباشرة على صورة الخلفية، نظرًا لأن نظامي يتضمن العديد من الواجهات الوظيفية الأخرى للمعالجة مربع حوار، واتخذ شكل مربع حوار غير مشروط، ثم انقله إلى الموقع المحدد بعد إنشائه.
خطوات الإنتاج:
ابدأ تشغيل VC، وأنشئ وظيفة مستند واحدة استنادًا إلى CVIEW، واحتفظ بالباقي باستخدام الإعدادات الافتراضية.
لم أتابع مفهوم ملء الشاشة كما هو الحال بالطريقة التقليدية، وبدلاً من ذلك، قمت بنقل الإطار الرئيسي MoveWindow إلى دقة الشاشة، ثم قمت بإزالة شريط العنوان وشريط القائمة وشريط الأدوات وشريط الحالة وما إلى ذلك لعرضه. تقريبًا تأثير ملء الشاشة، ثم قم بلصق صورة الخلفية عليها ربما لا يمكن اعتبار هذا مفهوم ملء الشاشة على الإطلاق (^_^) خطوات التنفيذ المحددة هي كما يلي:
قم بتعديل وظيفة InitInstance() الخاصة بالتطبيق كما يلي:
// تمت تهيئة النافذة الوحيدة، لذا قم بإظهارها وتحديثها.
m_pMainWnd->SetMenu(NULL);// قم بإزالة القائمة
m_pMainWnd->ModifyStyle(WS_THICKFRAME|WS_CAPTION,NULL);// تعديل خصائص النموذج
m_pMainWnd->MoveWindow(CRect(0,0,::GetSystemMetrics(SM_CXSCREEN),
::GetSystemMetrics(SM_CYSCREEN)),TRUE);// انقل النموذج إلى دقة الشاشة
m_pMainWnd->ShowWindow(SW_SHOWMAXIMIZED);// لا حاجة لشرح هذا
m_pMainWnd->UpdateWindow();
ثم قم بتعديل وظيفة عضو فئة MainFrame لإزالة شريط الأدوات وشريط الحالة. قم بتعديل وظيفة PreCreateWindow(CREATESTRUCT& cs) كما يلي:
إنت CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
إذا (CFrameWnd::OnCreate(lpCreateStruct) == -1)
العودة -1؛
FindWindow("Shell_TrayWnd",NULL)->ShowWindow(SW_HIDE);// إخفاء شريط المهام إذا لم يكن مخفيًا، فسيظهر هذا الشيء دائمًا في أوقات غير مناسبة ويؤثر على التأثير العام.
العودة 0؛
}
تعمل الخطوات المذكورة أعلاه على إخفاء شريط مهام WINDOWS، لذا يجب علينا استعادته عند خروج البرنامج، ولا نريد رؤيته بعد انتهاء البرنامج، وبما أن البرنامج يحتاج إلى إرسال رسالة WM_CLOSE عند الخروج، فيمكننا اعتراض رسالة WM_CLOSE. من MainFrame، هنا لاستعادة شريط الحالة، يكون الكود كما يلي:
باطلة CMainFrame::OnClose()
{
// TODO: أضف رمز معالج الرسائل الخاص بك هنا و/أو اتصل بـ default
FindWindow("Shell_TrayWnd",NULL)->ShowWindow(SW_SHOW);// استعادة شريط المهام
CFrameWnd::OnClose();
}
في هذه المرحلة، أكملنا أعمال التحضير الأساسية. والمهمة التالية هي لصق الصورة النقطية للخلفية وإنشاء مربع الحوار المعروض.
لصق الصورة النقطية للخلفية: قم بتحميل الصورة النقطية للخلفية، وقم بتعيين رسالة WM_PAITN الخاصة بـ VIEW، ثم الصق الصورة النقطية للخلفية، وقم بتعيين رسالة WM_EARSEBKGND في نفس الوقت، وقم بإزالة عمل محو الشاشة، فقط قم بتعديل بيان الإرجاع إلى: إرجاع TRUE.
باطلة CAoutDemoView::OnPaint()
{
// TODO: أضف رمز معالج الرسائل الخاص بك هنا
CPaintDC dc(this);// سياق الجهاز للرسم
HBITMAP hbitmap;
hbitmap=::LoadBitmap(::AfxGetInstanceHandle(),MAKEINTRESOURCE(IDB_BACKBMP));
HDC hMenDC=::CreateCompatibleDC(NULL);
SelectObject(hMenDC,hbitmap);
::StretchBlt(dc.m_hDC,0,0,1024,768,hMenDC,0,0,1024,768,SRCCOPY);
::DeleteDC(hMenDC);
::DeleteObject(hbitmap);
// لا تتصل بـ CView::OnPaint() لرسم الرسائل
}
قم بإنشاء مورد مربع حوار لعرض المعلومات ذات الصلة، وقم بتعديل خصائص مربع الحوار، Style->Popup، Border->None؛ وقم بإنشاء فئة مربع حوار CShowAboutDlg؛ ثم ضع عنصر تحكم CSTATIC في مربع الحوار واضبط موضعه.
قم بإنشاء مربع الحوار غير المشروط هذا في VIEW وعرضه:
CShowAboutDlg *m_pAboutDlg;
كريكتريكت؛
m_pAboutDlg = new CShowAboutDlg();
m_pAboutDlg->إنشاء(IDD_ABOUT);
m_pAboutDlg->MoveWindow(CRect(18,18,::GetSystemMetrics(SM_CXSCREEN)-13,::GetSystemMetrics(SM_CYSCREEN)-16),TRUE); // نظرًا لأن صورة الخلفية لها حدود، فيجب حجز هذا الموضع هنا
m_pAboutDlg->GetClientRect(&rect);
m_pAboutDlg->m_AboutCtrl.MoveWindow(rect,TRUE);// يحتل عنصر التحكم PIC منطقة عميل مربع الحوار
m_pAboutDlg->ShowWindow(SW_SHOW);
ما يلي هو الملف لإضافة فئة التحكم في عرض الخط، أضف ZgMemDC وZgDraw.h وZgDraw.cpp وTitleShow.h وTitleShow.cpp وPublicClass.cpp وPublicClass.h إلى المشروع، ثم قم بإضافة AutoFont.h و. AutoFont.cpp وغني عن القول أنه تم تقديم وظيفة هذه الفئة في المقالة السابقة بناءً على الشخص الذي قدم فئة التحكم في عرض الخط، فقد قمت بتعديل مقدار مناسب من التعليمات البرمجية وأجريت تعديلات على عرض النص. الفئة الأصلية الخط غير مناسب لمتطلبات العرض لنظامنا الحالي (^_^).
ثم قم فقط بتحميل الرسالة وعرضها في فئة الحوار.
قم بتعريف عرض كائن فئة CSTATIC TitleShow، ثم قم بإضافة محتوى عرض المعلومات الخاصة بك في التهيئة:
****
والخطوة الأخرى هي اعتراض حرف الإرجاع ومفاتيح ESC للخروج من مربع الحوار.
BOOL CShowAboutDlg::PreTranslateMessage(MSG* pMsg)
{
// TODO: أضف الكود المتخصص الخاص بك هنا و/أو اتصل بالفئة الأساسية
إذا (pMsg->message == WM_KEYDOWN)
{
التبديل (pMsg->wParam)
{
الحالة VK_RETURN:
إرجاع صحيح؛
حالة VK_ESCAPE:
إرجاع صحيح؛
}
}
إرجاع CDialog::PreTranslateMessage(pMsg);
}
في هذه المرحلة، تم الانتهاء من العمل الأساسي للبرنامج. قم بتجميع مشروعك وتشغيله لرؤية التأثير.
يوسع