باستخدام Window API، كيف يمكنني التأكد من احتفاظ عناصر التحكم بمظهرها الأصلي؟

StackOverflow https://stackoverflow.com/questions/111630

سؤال

يبدو أن بعض عناصر التحكم التي قمت بإنشائها تتوافق مع سمة 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>
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top