Bagikan melalui


Fungsi DrvSetPointerShape (winddi.h)

Fungsi DrvSetPointerShape digunakan untuk meminta driver untuk melepaskan pointer dari layar, jika driver telah menggambarnya di sana; untuk mencoba mengatur bentuk penunjuk baru; dan untuk meletakkan penunjuk baru pada tampilan pada posisi yang ditentukan.

Sintaks

ULONG DrvSetPointerShape(
  [in] SURFOBJ  *pso,
  [in] SURFOBJ  *psoMask,
  [in] SURFOBJ  *psoColor,
  [in] XLATEOBJ *pxlo,
  [in] LONG     xHot,
  [in] LONG     yHot,
  [in] LONG     x,
  [in] LONG     y,
  [in] RECTL    *prcl,
  [in] FLONG    fl
);

Parameter

[in] pso

Arahkan ke struktur SURFOBJ yang menggambarkan permukaan untuk menggambar.

[in] psoMask

Arahkan ke struktur SURFOBJ yang mendefinisikan masker AND-XOR. (Masker AND-XOR dijelaskan dalam Menggambar Penunjuk Monokrom.) Dimensi bitmap ini menentukan ukuran penunjuk. Tidak ada batasan implisit pada ukuran pointer, tetapi ukuran pointer optimal adalah 32 x 32, 48 x 48, dan 64 x 64 piksel. Jika parameter ini NULL, penunjuk transparan.

[in] psoColor

Arahkan ke struktur SURFOBJ yang menentukan warna untuk penunjuk warna. Jika parameter ini NULL, penunjuk adalah monokrom. Bitmap pointer memiliki lebar yang sama dengan psoMask dan setengah tinggi.

[in] pxlo

Penunjuk ke struktur XLATEOBJ yang menentukan warna dalam psoColor.

[in] xHot

Tentukan posisi x titik panas penunjuk relatif terhadap piksel kiri atasnya. Piksel yang ditunjukkan oleh hot spot harus diposisikan pada posisi pointer baru.

[in] yHot

Tentukan posisi y titik panas penunjuk relatif terhadap piksel kiri atasnya. Piksel yang ditunjukkan oleh hot spot harus diposisikan pada posisi pointer baru.

[in] x

Tentukan koordinat x dari posisi penunjuk baru.

[in] y

Tentukan koordinat y dari posisi penunjuk baru.

[in] prcl

Menentukan struktur RECTL yang menunjukkan lokasi di mana driver harus menulis persegi panjang yang menentukan batas ketat untuk bagian penunjuk yang terlihat.

[in] fl

Menentukan sekumpulan bendera yang dapat diperluas. Driver harus menolak panggilan jika ada bendera yang ditetapkan yang tidak dipahaminya. Parameter ini dapat berupa satu atau beberapa nilai yang telah ditentukan sebelumnya berikut ini, dan satu atau beberapa nilai yang ditentukan driver:

Bendera Makna
SPS_ALPHA Penunjuk memiliki nilai alfa per piksel.
SPS_ANIMATESTART Driver harus siap untuk menerima serangkaian bentuk penunjuk berukuran sama yang akan terdiri dari efek penunjuk animasi.
SPS_ANIMATEUPDATE Driver harus menggambar bentuk penunjuk berikutnya dalam seri animasi.
SPS_ASYNCCHANGE Bendera ini usang. Untuk driver warisan, driver harus menerima perubahan hanya jika mampu mengubah bentuk pointer di perangkat keras saat gambar lain sedang berlangsung pada perangkat. GDI menggunakan opsi ini hanya jika bendera GCAPS_ASYNCCHANGE yang sekarang usang diatur dalam anggota flGraphicsCaps dari struktur DEVINFO .
SPS_CHANGE Driver diminta untuk mengubah bentuk penunjuk.
SPS_FREQMASK Driver diminta untuk merender jejak mouse, memperbarui gambar sebanyak milidetik seperti yang ditunjukkan dalam ekspresi fl & SPS_FREQMASK. Driver yang mampu merender jejak mouse harus memiliki bendera GCAPS2_MOUSETRAILS yang diatur dalam anggota flGraphicsCaps2 dari struktur DEVINFO-nya .
SPS_LENGTHMASK Driver diminta untuk merender jejak mouse panjang yang ditunjukkan oleh ekspresi fl & SPS_LENGTHMASK. (Jejak mouse panjang N terdiri dari N + 1 gambar kursor.) Driver yang mampu merender jejak mouse harus memiliki bendera GCAPS2_MOUSETRAILS yang diatur dalam anggota flGraphicsCaps2 dari struktur DEVINFO-nya .

Nilai kembali

Nilai yang dikembalikan bisa menjadi salah satu nilai berikut:

Menampilkan kode Deskripsi
SPS_ACCEPT_EXCLUDE
Sudah usang. GDI akan menonaktifkan penunjuk driver dan kembali ke simulasi perangkat lunak jika driver mengembalikan nilai ini.
SPS_ACCEPT_NOEXCLUDE
Driver menerima bentuk. Bentuk ini didukung dalam perangkat keras dan GDI tidak khawatir tentang gambar lain yang menimpa penunjuk.
SPS_DECLINE
Driver tidak mendukung bentuk, jadi GDI harus mensimulasikannya.
SPS_ERROR
Driver biasanya mendukung bentuk ini, tetapi gagal karena alasan yang tidak biasa.

Keterangan

DrvSetPointerShape bersifat opsional untuk driver tampilan. Namun, jika fungsi ini diimplementasikan, DrvMovePointer juga harus diimplementasikan.

Anggota iUniq dari struktur SURFOBJ tempat psoMask dan titik psoColor unik untuk pointer unik. Driver dapat menggunakan informasi ini bersama dengan handel dhsurf unik struktur ini sebagai kunci cache untuk penembolokan kursor.

Ketika SPS_ALPHA diatur dalam parameter fl , psoMask adalah NULL dan psoColor menunjuk ke permukaan BGRA 32bpp. Nilai alfa per piksel menunjukkan keburaman piksel penunjuk yang sesuai dengan piksel desktop di bawahnya. Format alfa sumber telah diisi sebelumnya; artinya, masing-masing saluran warna permukaan sumber telah diawali dengan nilai alfa yang sesuai, sehingga menghilangkan operasi kalikan pada saat campuran.

Kursor alfa default sebagian besar hitam dan putih dengan berbagai nilai alfa; namun, tidak ada pembatasan warna karena aplikasi dapat menentukan kursor arbitrer itu sendiri. Ukuran penunjuk alfa yang khas adalah sekitar 8 piksel yang lebih besar dalam dimensi daripada pointer biasa tanpa alfa. Ini mengakomodasi efek bayangan, yang dicapai oleh filter buram yang memperluas bentuk bitmap pointer yang dihasilkan. Sebagian besar pointer akan menjadi bitmap piksel 64x64 atau lebih kecil.

Driver menunjukkan kemampuannya untuk menangani pointer dengan nilai alfa per piksel dengan mengatur bendera GCAPS2_ALPHACURSOR di anggota flGraphicsCaps2 dari struktur DEVINFO yang dikembalikan oleh DrvEnablePDEV.

Persyaratan

Persyaratan Nilai
Target Platform Desktop
Header winddi.h (termasuk Winddi.h)

Lihat juga

DrvEnablePDEV

DrvMovePointer

SURFOBJ

XLATEOBJ