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 |
---|---|
|
Sudah usang. GDI akan menonaktifkan penunjuk driver dan kembali ke simulasi perangkat lunak jika driver mengembalikan nilai ini. |
|
Driver menerima bentuk. Bentuk ini didukung dalam perangkat keras dan GDI tidak khawatir tentang gambar lain yang menimpa penunjuk. |
|
Driver tidak mendukung bentuk, jadi GDI harus mensimulasikannya. |
|
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) |