Mengaktifkan Gaya Visual

Topik ini menjelaskan cara mengonfigurasi aplikasi Anda untuk memastikan bahwa kontrol umum ditampilkan dalam gaya visual pilihan pengguna.

Topik ini mencakup bagian berikut.

Menggunakan Manifes atau Arahan untuk Memastikan Bahwa Gaya Visual Dapat Diterapkan ke Aplikasi

Untuk mengaktifkan aplikasi Anda menggunakan gaya visual, Anda harus menggunakan ComCtl32.dll versi 6 atau yang lebih baru. Karena versi 6 tidak dapat didistribusikan ulang, itu hanya tersedia ketika aplikasi Anda berjalan pada versi Windows yang berisinya. Windows dikirim dengan versi 5 dan versi 6. ComCtl32.dll versi 6 berisi kontrol pengguna dan kontrol umum. Secara default, aplikasi menggunakan kontrol pengguna yang ditentukan dalam User32.dll dan kontrol umum yang ditentukan dalam ComCtl32.dll versi 5. Untuk daftar versi DLL dan platform distribusinya, lihat Versi Kontrol Umum.

Jika Anda ingin aplikasi Anda menggunakan gaya visual, Anda harus menambahkan manifes aplikasi atau direktif kompilator yang menunjukkan bahwa ComCtl32.dll versi 6 harus digunakan jika tersedia.

Manifes aplikasi memungkinkan aplikasi menentukan versi rakitan mana yang diperlukan. Di Microsoft Win32, rakitan adalah sekumpulan DLL dan daftar objek yang dapat diverifikasi yang terkandung dalam DLL tersebut.

Manifes ditulis dalam XML. Nama file manifes aplikasi adalah nama executable Anda diikuti dengan ekstensi nama file .manifest; misalnya, MyApp.exe.manifest. Contoh manifes berikut menunjukkan bahwa bagian pertama menjelaskan manifes itu sendiri. Tabel berikut menunjukkan atribut yang diatur oleh elemen assemblyIdentity di bagian deskripsi manifes.

Atribut Deskripsi
versi Versi manifes. Versi harus dalam bentuk major.minor.revision.build (yaitu, n.n.n.n, di mana n <=65535).
processorArchitecture Prosesor yang dikembangkan aplikasi Anda.
nama Termasuk nama perusahaan, nama produk, dan nama aplikasi.
jenis Jenis aplikasi Anda, seperti Win32.

 

Manifes sampel juga memberikan deskripsi aplikasi Anda dan menentukan dependensi aplikasi. Tabel berikut menunjukkan atribut yang ditetapkan oleh elemen assemblyIdentity di bagian dependensi.

Atribut Deskripsi
jenis Jenis komponen dependensi, seperti Win32.
nama Nama komponen.
versi Versi komponen.
processorArchitecture Prosesor yang dirancang untuk komponen.
Publickeytoken Token kunci yang digunakan dengan komponen ini.
bahasa Bahasa komponen.

 

Berikut ini adalah contoh file manifes.

Penting

Atur entri processorArchitecture ke "X86" jika aplikasi Anda menargetkan platform Windows 32 bit, atau ke "amd64" jika aplikasi Anda menargetkan platform Windows 64 bit. Anda juga dapat menentukan "*", yang memastikan bahwa semua platform ditargetkan, seperti yang ditunjukkan dalam contoh berikut.

 

<?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.0"
    processorArchitecture="*"
    name="CompanyName.ProductName.YourApplication"
    type="win32"
/>
<description>Your application description here.</description>
<dependency>
    <dependentAssembly>
        <assemblyIdentity
            type="win32"
            name="Microsoft.Windows.Common-Controls"
            version="6.0.0.0"
            processorArchitecture="*"
            publicKeyToken="6595b64144ccf1df"
            language="*"
        />
    </dependentAssembly>
</dependency>
</assembly>

Jika Anda menggunakan Microsoft Visual C++ 2005 atau yang lebih baru, Anda dapat menambahkan direktif kompilator berikut ke kode sumber Anda alih-alih membuat manifes secara manual. Untuk keterbacaan, arahan dipecah menjadi beberapa baris di sini.

#pragma comment(linker,"\"/manifestdependency:type='win32' \
name='Microsoft.Windows.Common-Controls' version='6.0.0.0' \
processorArchitecture='*' publicKeyToken='6595b64144ccf1df' language='*'\"")

Topik berikut menjelaskan langkah-langkah untuk menerapkan gaya visual ke berbagai jenis aplikasi. Perhatikan bahwa format manifes sama dalam setiap kasus.

Menggunakan ComCtl32.dll Versi 6 dalam Aplikasi yang Hanya Menggunakan Ekstensi Standar

Berikut ini adalah contoh aplikasi yang tidak menggunakan ekstensi pihak ketiga.

  • Kalkulator
  • FreeCell (di Windows Vista dan Windows 7)
  • Minesweeper (di Windows Vista dan Windows 7)
  • Notepad
  • Solitaire (di Windows Vista dan Windows 7)

Untuk membuat manifes dan memungkinkan aplikasi Anda menggunakan gaya visual.

  1. Tautkan ke ComCtl32.lib dan panggil InitCommonControls.

  2. Tambahkan file bernama YourApp.exe.manifest ke pohon sumber Anda yang memiliki format manifes XML.

    <?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.0"
        processorArchitecture="*"
        name="CompanyName.ProductName.YourApplication"
        type="win32"
    />
    <description>Your application description here.</description>
    <dependency>
        <dependentAssembly>
            <assemblyIdentity
                type="win32"
                name="Microsoft.Windows.Common-Controls"
                version="6.0.0.0"
                processorArchitecture="*"
                publicKeyToken="6595b64144ccf1df"
                language="*"
            />
        </dependentAssembly>
    </dependency>
    </assembly>
    
  3. Tambahkan manifes ke file sumber daya aplikasi Anda sebagai berikut:

    CREATEPROCESS_MANIFEST_RESOURCE_ID RT_MANIFEST "YourApp.exe.manifest"
    

    Catatan

    Saat Anda menambahkan entri sebelumnya ke sumber daya, Anda harus memformatnya pada satu baris. Atau, Anda dapat menempatkan file manifes XML di direktori yang sama dengan file yang dapat dieksekusi aplikasi Anda. Sistem operasi akan memuat manifes dari sistem file terlebih dahulu, lalu memeriksa bagian sumber daya dari executable. Versi sistem file lebih diutamakan.

     

Saat Anda membuat aplikasi, manifes akan ditambahkan sebagai sumber daya biner.

Menggunakan ComCtl32 Versi 6 di Panel Kontrol atau DLL yang Dijalankan oleh RunDll32.exe

Untuk membuat manifes dan memungkinkan aplikasi Anda menggunakan gaya visual.

  1. Tautkan ke ComCtl32.lib dan panggil InitCommonControls.

  2. Tambahkan file yang disebut YourApp.cpl.manifest ke pohon sumber Anda yang memiliki format manifes XML.

    <?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.0"
        processorArchitecture="*"
        name="CompanyName.ProductName.YourApplication"
        type="win32"
    />
    <description>Your application description here.</description>
    <dependency>
        <dependentAssembly>
            <assemblyIdentity
                type="win32"
                name="Microsoft.Windows.Common-Controls"
                version="6.0.0.0"
                processorArchitecture="*"
                publicKeyToken="6595b64144ccf1df"
                language="*"
            />
        </dependentAssembly>
    </dependency>
    </assembly>
    
  3. Tambahkan manifes ke file sumber daya aplikasi Anda sebagai ID sumber daya 123.

Catatan

Saat Anda menulis aplikasi Panel Kontrol, letakkan dalam kategori yang sesuai. Panel Kontrol sekarang mendukung kategorisasi aplikasi Panel Kontrol. Ini berarti bahwa aplikasi Panel Kontrol dapat ditetapkan pengidentifikasi dan dipisahkan ke dalam area tugas seperti Tambahkan atau Hapus Program, Tampilan dan Tema, atau Tanggal, Waktu, Bahasa, dan Opsi Regional.

 

Menambahkan Dukungan Gaya Visual ke Ekstensi, Plug-in, Snap-in MMC atau DLL yang Dibawa ke dalam Proses

Dukungan untuk gaya visual dapat ditambahkan ke ekstensi, plug-in, snap-in MMC, atau DLL yang dibawa ke dalam proses. Misalnya, gunakan langkah-langkah berikut untuk menambahkan dukungan gaya visual untuk snap-in Microsoft Management Console (MMC).

  1. Kompilasi snap-in Anda dengan bendera -DISOLATION_AWARE_ENABLED atau sisipkan pernyataan berikut sebelum pernyataan "windows.h" #include.

    #define ISOLATION_AWARE_ENABLED 1
    

    Untuk informasi selengkapnya tentang ISOLATION_AWARE_ENABLED, lihat Mengisolasi Komponen.

  2. Sertakan file header kontrol umum di sumber snap-in Anda.

    #include <commctrl.h>
    
  3. Tambahkan file bernama YourApp.manifest ke pohon sumber Anda yang menggunakan format manifes XML.

    <?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.0"
        processorArchitecture="*"
        name="CompanyName.ProductName.YourApplication"
        type="win32"
    />
    <description>Your application description here.</description>
    <dependency>
        <dependentAssembly>
            <assemblyIdentity
                type="win32"
                name="Microsoft.Windows.Common-Controls"
                version="6.0.0.0"
                processorArchitecture="*"
                publicKeyToken="6595b64144ccf1df"
                language="*"
            />
        </dependentAssembly>
    </dependency>
    </assembly>
    
  4. Tambahkan manifes ke file sumber daya snap-in Anda. Lihat Menggunakan ComCtl32 Versi 6 dalam Aplikasi yang Menggunakan Ekstensi, Plug-in, atau DLL yang Dibawa ke dalam Proses untuk detail tentang menambahkan manifes ke file sumber daya.

Menonaktifkan Gaya Visual

Anda dapat menonaktifkan gaya visual untuk kontrol atau untuk semua kontrol di jendela dengan memanggil fungsi SetWindowTheme sebagai berikut:

SetWindowTheme(hwnd, L" ", L" ");

Dalam contoh sebelumnya, hwnd adalah handel jendela untuk menonaktifkan gaya visual. Setelah panggilan, kontrol merender tanpa gaya visual.

Menggunakan Gaya Visual dengan Konten HTML

Halaman HTML yang mengubah properti Lembar Gaya Berskala (CSS) seperti latar belakang atau batas tidak memiliki gaya visual yang diterapkan padanya. Mereka menampilkan atribut CSS yang ditentukan. Ketika ditentukan sebagai bagian dari konten, sebagian besar properti CSS berlaku untuk elemen yang menerapkan gaya visual.

Secara default, gaya visual diterapkan ke kontrol HTML intrinsik pada halaman yang ditampilkan di Microsoft Internet Explorer 6 dan versi yang lebih baru. Untuk menonaktifkan gaya visual untuk halaman HTML, tambahkan tag META ke bagian .<head> Teknik ini juga berlaku untuk konten yang di kemas sebagai Aplikasi HTML (HTU). Untuk menonaktifkan gaya visual, tag META harus sebagai berikut:

<META HTTP-EQUIV="MSThemeCompatible" CONTENT="no">

Catatan

Jika pengaturan browser dan pengaturan tag tidak setuju, halaman tidak akan menerapkan gaya visual. Misalnya, jika tag META diatur ke "tidak" dan browser diatur untuk mengaktifkan gaya visual, gaya visual tidak akan diterapkan ke halaman. Namun, jika browser atau tag META diatur ke "ya" dan item lain tidak ditentukan, gaya visual akan diterapkan.

 

Gaya visual mungkin mengubah tata letak konten Anda. Selain itu, jika Anda mengatur atribut tertentu pada kontrol HTML intrinsik, seperti lebar tombol, Anda mungkin menemukan bahwa label pada tombol tidak dapat dibaca di bawah gaya visual tertentu.

Anda harus menguji konten Anda secara menyeluruh menggunakan gaya visual untuk menentukan apakah menerapkan gaya visual memiliki efek buruk pada konten dan tata letak Anda.

Ketika Gaya Visual tidak Diterapkan

Untuk menghindari penerapan gaya visual ke jendela tingkat atas, berikan jendela wilayah non-null (SetWindowRgn). Sistem mengasumsikan bahwa jendela dengan wilayah non-NULL adalah jendela khusus yang tidak menggunakan gaya visual. Jendela anak yang terkait dengan jendela tingkat atas gaya non-visual mungkin masih menerapkan gaya visual meskipun jendela induk tidak.

Jika Anda ingin menonaktifkan penggunaan gaya visual untuk semua jendela di aplikasi Anda, panggil SetThemeAppProperties dan jangan meneruskan bendera STAP_ALLOW_NONCLIENT. Jika aplikasi tidak memanggil SetThemeAppProperties, nilai bendera yang diasumsikan STAP_ALLOW_NONCLIENT | STAP_ALLOW_CONTROLS | STAP_ALLOW_WEBCONTENT. Nilai yang diasumsikan menyebabkan area nonkelola, kontrol, dan konten web menerapkan gaya visual.

Membuat Aplikasi Anda Kompatibel dengan Versi Windows Sebelumnya

Sebagian besar arsitektur gaya visual dirancang untuk mempermudah pengiriman produk Anda pada versi Windows sebelumnya yang tidak mendukung perubahan tampilan kontrol. Saat mengirimkan aplikasi untuk lebih dari satu sistem operasi, ketahui hal-hal berikut:

  • Dalam versi Windows sebelum Windows 8, gaya visual mati ketika kontras tinggi aktif. Untuk mendukung kontras tinggi, aplikasi warisan yang mendukung gaya visual perlu menyediakan jalur kode terpisah untuk menggambar elemen UI dengan benar dengan kontras tinggi. Di Windows 8, kontras tinggi adalah bagian dari gaya visual; namun, aplikasi Windows 8 (yang mencakup GUID Windows 8 di bagian kompatibilitas manifes aplikasinya) masih perlu menyediakan jalur kode terpisah untuk dirender dengan benar kontras tinggi pada Windows 7 sebelumnya.
  • Jika Anda menggunakan fitur di ComCtl32.dll versi 6, seperti tampilan petak peta atau kontrol tautan, Anda harus menangani kasus di mana kontrol tersebut tidak tersedia di komputer pengguna Anda. ComCtl32.dll versi 6 tidak dapat didistribusikan ulang.
  • Uji aplikasi Anda untuk memastikan Anda tidak mengandalkan fitur ComCtl32.dll versi 6 tanpa terlebih dahulu memeriksa versi saat ini.
  • Jangan tautkan ke UxTheme.lib.
  • Tulis kode penanganan kesalahan untuk instans ketika gaya visual tidak berfungsi seperti yang diharapkan.
  • Menginstal manifes aplikasi Anda di versi sebelumnya tidak akan memengaruhi penyajian kontrol.

Gaya Visual