IDirectDrawSurface7::Metode kunci (ddraw.h)

Mendapatkan pointer ke memori permukaan.

Sintaks

HRESULT Lock(
  [in]      LPRECT           unnamedParam1,
  [in, out] LPDDSURFACEDESC2 unnamedParam2,
  [in]      DWORD            unnamedParam3,
  [in]      HANDLE           unnamedParam4
);

Parameter

[in] unnamedParam1

Penunjuk ke struktur RECT yang mengidentifikasi wilayah permukaan yang sedang dikunci. Jika parameter ini NULL, seluruh permukaan dikunci.

[in, out] unnamedParam2

Penunjuk ke struktur DDSURFACEDESC2 yang menjelaskan detail relevan tentang permukaan dan yang menerima informasi tentang permukaan.

[in] unnamedParam3

Kombinasi bendera yang menentukan cara mengunci permukaan. Bendera berikut didefinisikan:

DDLOCK_DONOTWAIT

Pada antarmuka IDirectDrawSurface7 , defaultnya adalah DDLOCK_WAIT. Jika Anda ingin mengganti default dan menggunakan waktu saat akselerator sibuk (sebagaimana ditandai dengan nilai pengembalian DDERR_WASSTILLDRAWING), gunakan DDLOCK_DONOTWAIT.

DDLOCK_EVENT

Saat ini tidak diimplementasikan.

DDLOCK_NOOVERWRITE

Baru untuk DirectX 7.0. Hanya digunakan dengan kunci vertex-buffer Direct3D. Menunjukkan bahwa tidak ada simpul yang dirujuk dalam operasi gambar sejak awal bingkai (atau kunci terakhir tanpa bendera ini) dimodifikasi selama kunci. Ini dapat berguna ketika Anda hanya ingin menambahkan data ke buffer vertex.

DDLOCK_NOSYSLOCK

Jangan mengambil Win16Mutex (juga dikenal sebagai Win16Lock). Bendera ini diabaikan saat mengunci permukaan utama.

DDLOCK_DISCARDCONTENTS

Baru untuk DirectX 7.0. Hanya digunakan dengan kunci vertex-buffer Direct3D. Menunjukkan bahwa tidak ada asumsi yang dibuat tentang isi buffer vertex selama kunci ini. Ini memungkinkan Direct3D atau driver untuk menyediakan area memori alternatif sebagai buffer vertex. Ini berguna ketika Anda berencana untuk menghapus konten buffer vertex dan mengisi data baru.

DDLOCK_OKTOSWAP

Bendera ini usang dan digantikan oleh bendera DDLOCK_DISCARDCONTENTS.

DDLOCK_READONLY

Menunjukkan bahwa permukaan yang dikunci hanya dapat dibaca.

DDLOCK_SURFACEMEMORYPTR

Menunjukkan bahwa penunjuk memori yang valid ke bagian atas persegi panjang yang ditentukan harus dikembalikan. Jika tidak ada persegi panjang yang ditentukan, penunjuk ke bagian atas permukaan akan dikembalikan. Ini adalah default.

DDLOCK_WAIT

Jika kunci tidak dapat diperoleh karena operasi transfer blok bit (bitblt) sedang berlangsung, Kunci mencoba lagi sampai kunci diperoleh atau terjadi kesalahan lain, seperti DDERR_SURFACEBUSY.

DDLOCK_WRITEONLY

Menunjukkan bahwa permukaan yang dikunci diaktifkan untuk menulis.

[in] unnamedParam4

Menangani peristiwa. Parameter ini saat ini tidak digunakan dan harus diatur ke NULL.

Mengembalikan nilai

Jika metode berhasil, nilai yang dikembalikan adalah DD_OK.

Jika gagal, metode dapat mengembalikan salah satu nilai kesalahan berikut:

  • DDERR_INVALIDOBJECT
  • DDERR_INVALIDPARAMS
  • DDERR_OUTOFMEMORY
  • DDERR_SURFACEBUSY
  • DDERR_SURFACELOST
  • DDERR_WASSTILLDRAWING

Keterangan

Di IDirectDrawSurface7, perilaku default Kunci adalah menunggu akselerator selesai. Oleh karena itu, dalam kondisi default, Lock tidak pernah mengembalikan DDERR_WASSTILLDRAWING. Jika Anda ingin melihat kode kesalahan dan tidak menunggu sampai operasi bitblt berhasil, gunakan bendera DDLOCK_DONOTWAIT.

Setelah mengambil pointer memori permukaan, Anda dapat mengakses memori permukaan hingga metode IDirectDrawSurface7::Unlock yang sesuai dipanggil. Ketika permukaan tidak terkunci, penunjuk ke memori permukaan tidak valid.

Jangan panggil fungsi bitblt DirectDraw ke bitblt dari wilayah permukaan yang terkunci. Jika Anda melakukannya, bitblt mengembalikan DDERR_SURFACEBUSY atau DDERR_LOCKEDSURFACES. Fungsi blit GDI juga gagal secara diam-diam saat digunakan pada permukaan memori video terkunci.

Kecuali Anda menyertakan bendera DDLOCK_NOSYSLOCK, Lock menyebabkan DirectDraw menahan Win16Mutex (juga dikenal sebagai Win16Lock) sampai Anda memanggil metode IDirectDrawSurface7::Unlock . Debugger GUI tidak dapat beroperasi saat Win16Mutex ditahan.

Persyaratan

Persyaratan Nilai
Target Platform Windows
Header ddraw.h
Pustaka Ddraw.lib
DLL Ddraw.dll

Lihat juga

IDirectDrawSurface7