Struktur DEVMODEW

Struktur DEVMODEW adalah versi Unicode dari struktur DEVMODE, yang dijelaskan dalam dokumentasi Microsoft Windows SDK. (Akhiran 'W' pada DEVMODEW adalah singkatan dari karakter "wide", atau Unicode.) Meskipun aplikasi dapat menggunakan salah satu struktur, driver diperlukan untuk menggunakan struktur DEVMODEW daripada struktur DEVMODE.

Anggota Publik dan Privat

Segera mengikuti anggota yang ditentukan struktur DEVMODEW (sering disebut sebagai anggota DEVMODEW publiknya), mungkin ada sekumpulan anggota yang ditentukan driver (anggota DEVMODEW privatnya). Gambar berikut menunjukkan bagian publik (struktur DEVMODEW aktual itu sendiri) dan bagian privat.

Diagram yang mengilustrasikan bagian publik dan privat dari struktur DEVMODEW.

Biasanya, anggota privat hanya digunakan oleh driver printer. Driver menyediakan ukuran, dalam byte, dari area privat ini di anggota dmDriverExtra . Anggota privat yang ditentukan driver untuk penggunaan eksklusif oleh driver.

Untuk pengandar printer, struktur DEVMODEW digunakan untuk menentukan pilihan pengguna untuk dokumen cetak. Ini juga digunakan untuk menentukan nilai default pilihan ini untuk printer, seperti jumlah salinan untuk dicetak, ukuran kertas, dan atribut lainnya. Untuk perangkat tampilan, struktur DEVMODEW menentukan atribut tampilan seperti jumlah bit per piksel, dimensi piksel, dan frekuensi tampilan.

Menginisialisasi Struktur DEVMODEW

Tergantung pada apakah itu akan digunakan oleh driver tampilan atau oleh driver printer, struktur DEVMODEW diinisialisasi dengan dua cara yang berbeda.

  • Inisialisasi DRIVER tampilan DEVMODEW

    Titik masuk DrvGetModes driver tampilan menginisialisasi semua anggota struktur DEVMODEW ke nol. DrvGetModes kemudian menyalin nama DLL driver tampilan ke anggota dmDeviceName , mengisi anggota dmSpecVersion dan dmDriverVersion dengan versi struktur DEVMODEW, dan menyalin informasi atribut tampilan ke anggota yang sesuai.

  • Inisialisasi driver printer DEVMODEW

    Ketika aplikasi melakukan panggilan ke DocumentProperties (fungsi DLL antarmuka printer yang dijelaskan dalam dokumentasi Microsoft Windows SDK) atau DrvDocumentPropertySheets (DDI grafis sistem operasi berbasis NT), struktur DEVMODEW dibuat dengan nilai default. Aplikasi kemudian gratis untuk memodifikasi salah satu anggota DEVMODEW publik. Setelah perubahan apa pun, aplikasi kemudian harus melakukan panggilan kedua ke fungsi yang sama dengan yang disebut sebelumnya, untuk menggabungkan anggota yang diubah dengan anggota struktur DEVMODEW internal driver. Panggilan kedua diperlukan karena beberapa perubahan mungkin tidak berfungsi dengan benar; pengandar pencetak harus dipanggil untuk memperbaiki struktur DEVMODEW. Ketika dokumen akan dicetak, aplikasi meneruskan struktur DEVMODEW gabungan ke CreateDC (dijelaskan dalam dokumentasi Microsoft Windows SDK), yang meneruskannya ke DDI DrvEnablePDEV . Pada saat itu, DLL penyajian driver memvalidasi struktur DEVMODEW dan melakukan perbaikan, jika perlu, sebelum melakukan pekerjaan cetak.

Menggunakan Struktur DEVMODEW

Beberapa API dan DDI grafis menggunakan informasi dalam struktur DEVMODEW untuk tujuan seperti mencetak, mengkueri kemampuan perangkat, memperlihatkan antarmuka pengguna, dan lainnya. Misalnya, DrvConvertDevMode adalah DDI grafik penampung cetak yang menerjemahkan struktur DEVMODEW dari satu versi sistem operasi ke versi sistem operasi lainnya. Ini mungkin diperlukan jika driver printer mendapatkan struktur DEVMODEW dari komputer lain yang berjalan pada versi sistem operasi yang berbeda.

Memodifikasi Struktur DEVMODEW

Aplikasi dan driver gratis untuk meminta struktur DEVMODEW dan memodifikasi bagian publiknya secara langsung. Namun, hanya driver yang diizinkan untuk memodifikasi anggota struktur DEVMODEW privat.

Untuk memodifikasi anggota struktur DEVMODEW privat, driver harus terlebih dahulu menentukan offset awal data privat. Mengingat penunjuk ke awal struktur ini, dan anggota dmSize , yang memegang ukuran bagian publik dari struktur, awal bagian privat dapat ditemukan. Contoh berikut menunjukkan cara menginisialisasi penunjuk ke awal bagian privat. Dalam contoh ini, pdm menunjuk ke awal struktur DEVMODEW.

PVOID pvDriverData = (PVOID)  (((BYTE *) pdm) + (pdm -> dmSize));

Perbedaan DRIVER Printer/Driver Tampilan DEVMODEW

Anggota struktur DEVMODEW termasuk dalam tiga kategori:

  • Anggota yang hanya digunakan oleh driver printer

  • Anggota yang hanya digunakan oleh driver tampilan

  • Anggota yang digunakan oleh printer dan driver tampilan

Tabel berikut ini mencantumkan beberapa anggota DEVMODEW publik yang hanya digunakan oleh driver printer:

Hanya Digunakan oleh Pengandar Pencetak Tujuan
dmScale Menentukan persentase di mana gambar akan diskalakan untuk pencetakan.
dmCopies Menentukan jumlah salinan yang akan dicetak.
dmColor Menentukan apakah pencetak warna harus mencetak warna atau monokrom.
dmOrientation Menentukan orientasi kertas, baik potret atau lanskap.

Tabel berikutnya mencantumkan beberapa anggota DEVMODEW publik yang hanya digunakan oleh driver tampilan:

Hanya Digunakan oleh Driver Tampilan Tujuan
dmBitsPerPel Menentukan resolusi warna, dalam bit per piksel, dari perangkat tampilan.
dmPelsWidth Menentukan lebar, dalam piksel, dari permukaan perangkat yang terlihat.
dmPelsHeight Menentukan tinggi, dalam piksel, dari permukaan perangkat yang terlihat.
dmDisplayFlags Menentukan mode tampilan - warna versus monokrom, terjalin versus noninterlaced.
dmDisplayFrequency Menentukan, dalam hertz, laju refresh layar.

Tabel ketiga mencantumkan beberapa anggota DEVMODEW publik yang digunakan oleh printer dan driver tampilan:

Digunakan oleh Pencetak dan Pengandar Tampilan Tujuan
dmDeviceName Untuk tampilan, menentukan DLL pengandar tampilan. Untuk pencetak, tentukan "nama yang mudah diingat" dari pencetak.
dmFields Menentukan bendera bit yang mengidentifikasi anggota DEVMODEW mana yang mengikutinya yang sedang digunakan. Misalnya, bendera DM_BITSPERPEL diatur saat anggota dmBitsPerPel berisi data yang valid.
dmSize Menentukan ukuran, dalam byte, dari bagian publik struktur DEVMODEW.
dmDriverExtra Menentukan jumlah byte data driver privat setelah anggota struktur publik. Untuk driver tampilan, ini biasanya nol.