باستخدام Window API، كيف يمكنني التأكد من احتفاظ عناصر التحكم بمظهرها الأصلي؟
-
02-07-2019 - |
سؤال
يبدو أن بعض عناصر التحكم التي قمت بإنشائها تتوافق مع سمة Windows 95 القديمة، كيف يمكنني منع ذلك؟فيما يلي مثال لزر لا يحتفظ بالمظهر الأصلي لنظام التشغيل (أنا أستخدم نظام التشغيل Vista كبيئة التطوير الخاصة بي):
HWND button = CreateWindowEx(NULL, L"BUTTON", L"OK", WS_VISIBLE | WS_CHILD | BS_PUSHBUTTON,
170, 340, 80, 25, hwnd, NULL, GetModuleHandle(NULL), NULL);
أنا أستخدم C++ الأصلي مع Windows API، ولا يوجد تعليمات برمجية مُدارة.
المحلول
أعتقد أن الأمر لا علاقة له بالرمز الخاص بك، ولكن عليك إعداد ملف مناسب يظهر ملف للحصول على عناصر التحكم تحت عنوان.
بعض المعلومات هنا: @msdn.com و هنا: @blogs.msdn.com
يمكنك رؤية الفرق بين التطبيق مع وبدون البيان هنا: Heaventools.com
نصائح أخرى
لإضافة بيان إلى التطبيق، يلزمك إنشاء ملف MyApp.manifest وإضافته إلى ملف مورد التطبيق:
//-- This define is normally part of the SDK but define it if this
//-- is an older version of the SDK.
#ifndef RT_MANIFEST
#define RT_MANIFEST 24
#endif
//-- Add the MyApp XP Manifest file
CREATEPROCESS_MANIFEST_RESOURCE_ID RT_MANIFEST "MyApp.manifest"
مع الإصدارات الأحدث من استوديو مرئي هناك أداة البيان علامة التبويب الموجودة في إعدادات المشروع و ملفات البيان الإضافية يمكن أيضًا استخدام الحقل الموجود في علامة التبويب هذه لتحديد ملف البيان.
فيما يلي ملف MyApp.manifest بسيط لتطبيق Win32:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<assemblyIdentity
version="1.0.0.1"
processorArchitecture="X86"
name="Microsoft.Windows.MyApp"
type="win32"
/>
<description>MyApp</description>
</assembly>
إذا كان تطبيقك يعتمد على ملفات dll الأخرى، فيمكن أيضًا إضافة هذه التفاصيل إلى البيان وسيستخدم Windows هذه المعلومات للتأكد من أن تطبيقك يستخدم دائمًا الإصدارات الصحيحة من ملفات dll التابعة هذه.
على سبيل المثال، فيما يلي تفاصيل التبعية الواضحة لعنصر التحكم المشترك ومكتبات وقت التشغيل للإصدار 8.0 C:
<dependentAssembly>
<assemblyIdentity
type="win32"
name="Microsoft.Windows.Common-Controls"
version="6.0.0.0"
processorArchitecture="X86"
publicKeyToken="6595b64144ccf1df"
language="*"
/>
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity
type="win32"
name="Microsoft.VC80.CRT"
version="8.0.50608.0"
processorArchitecture="x86"
publicKeyToken="1fc8b3b9a1e18e3b" />
</dependentAssembly>