كانت هناك مناقشات على الإنترنت حول تطبيق أسلوب XP من خلال البرمجة لفترة طويلة، ولكن لا يوجد حل مثالي لتطبيق أسلوب XP من خلال برمجة VB. أخيرًا كشف المؤلف السر خلال أيام وليالي من الدراسة الشاقة. ما يلي مقسم إلى ثلاثة جوانب لمشاركتها معك.
انقر لتنزيل ملف التعليمات البرمجية المصدر
واحد. استخدام ملفات البيان لتحقيق نمط XP
في ظل الظروف العادية، في أنظمة Windows XP، يكون شريط عنوان النافذة الخاص بالتطبيق الذي تم تطويره باستخدام VB6 فقط هو الذي يحتوي على نمط XP، ولا تزال الأزرار ومربعات النص وعناصر التحكم الأخرى في النموذج تعرض نمط Windows التقليدي. كما هو مبين في الشكل 1:
من خلال الرجوع إلى فصل Visual Style في MSDN، نعلم أن Windows XP يستخدم Comctl32.dll (الإصدار 6) لتحميل المكونات بنمط XP، ويقوم التطبيق بإعلام النظام للقيام بذلك من خلال ملف مورد XML. محتويات ملف XML هي كما يلي:
<?إصدار xml=1.0 ترميز=UTF-8 مستقل=نعم?>
<assembly xmlns=urn:schemas-microsoft-com:asm.v1maniVersion=1.0>
<هوية التجميع
الاسم = بيان نمط XP
معمارية المعالج=x86
الإصدار=1.0.0.0
النوع=win32/>
<التبعية>
<الجمعية التابعة>
<هوية التجميع
النوع=win32
name=Microsoft.Windows.Common-Controls
الإصدار=6.0.0.0
معمارية المعالج=x86
publicKeyToken=6595b64144ccf1df
اللغة=*
/>
</الجمعية التابعة>
</ التبعية>
</التجمع>
افترض أن اسم البرنامج النهائي المترجم الخاص بك هو abc.exe، ودليل العمل هو d:/vbxp. انسخ محتوى XML أعلاه واحفظه كملف نصي. ثم أعد تسمية الملف abc.exe.manifest (لاحظ أنه يجب إزالة الامتداد .txt). في برنامج VB، نحتاج إلى استدعاء الدالة InitCommonControlsEx لتهيئة فئة المكون من comctl32.dll (الإصدار 6) قبل تحميل كافة النماذج. يتم الإعلان عن وظيفة API InitCommonControlsEx والثوابت وأنواع البيانات ذات الصلة على النحو التالي:
وظيفة الإعلان الخاص InitCommonControlsEx Lib comctl32.dll _
(iccex باسم tagInitCommonControlsEx) باسم منطقي
نوع خاص: tagInitCommonControlsEx
lngSize طالما
lngICC طالما
نوع النهاية
الكونست الخاص ICC_USEREX_CLASSES = &H200
نكتب هنا دالة لتغليف عملية التهيئة:
الوظيفة العامة InitCommonControlsVB() كقيمة منطقية
على خطأ استئناف التالي
تعتيم iccex كـ tagInitCommonControlsEx
مع إيسيكس
.lngSize = LenB(iccex)
.lngICC = ICC_USEREX_CLASSES
نهاية مع
InitCommonControlsEx iccex
InitCommonControlsVB = (Err.Number = 0)
على خطأ انتقل إلى 0
وظيفة النهاية
لاحظ أنه يجب إكمال إجراء التهيئة قبل تحميل جميع النماذج، لذلك يجب وضع البيانات ذات الصلة في Sub Main()، ويجب بدء المشروع من Sub Main(). الرمز هو كما يلي:
فرعي رئيسي()
InitCommonControlsVB
Form1.Show
نهاية الفرعية
عند هذه النقطة، سيكون لملف abc.exe المترجم نمط XP، كما هو موضح في الشكل 2: