Terkadang, kita perlu menggunakan VB untuk dengan cepat mengembangkan program pemrosesan gambar data pengujian. Mengubah kursor mouse pada kontrol gambar menjadi bentuk kursor silang besar yang digunakan pada perangkat lunak AutoCAD akan mencapai hasil yang lebih baik daripada kursor panah biasa. Jadi bagaimana kita menerapkan kursor silang sebesar itu?
----Pertama-tama, mari kita perjelas efek yang ingin kita capai. Jika kita menggambar dalam kontrol Gambar, maka ketika mouse bergerak ke kontrol ini, kursor mouse segera berubah menjadi bentuk salib besar, dan garis horizontal di dalamnya. kursor berubah dari batas kontrol Dari batas kiri ke batas kanan, garis vertikal bergerak dari batas atas ke batas bawah kontrol, yaitu kursor silang besar membagi kontrol gambar menjadi empat kuadran. Saat mouse bergerak di luar kendali, kursor kembali ke bentuk aslinya.
----Untuk mengimplementasikan kursor seperti itu, kita harus melakukannya sendiri dengan menggambar garis. Jika mouse berada dalam kontrol gambar, pertama-tama gambarlah garis horizontal dan vertikal kursor pada posisi mouse saat ini, saat posisi mouse bergerak, pertama-tama hapus garis horizontal dan vertikal asli kursor, lalu gambar garis horizontal garis kursor pada posisi baru. Garis dan garis vertikal, maka kita harus merespon event MouseMove pada kontrol gambar. Tentu saja, apa pun konten yang ada di kontrol gambar, kita tidak dapat menghancurkan konten asli saat kita menghapus garis kursor dan menggambar ulang garis kursor. Oleh karena itu, kita perlu mengatur DrawMode dari kontrol gambar ke vbXorPen (mode XOR) ke gambar garis horizontal kursor Saat menambahkan garis vertikal, gunakan XOR untuk menggabungkan garis horizontal dan garis vertikal. Warna piksel diatur ke nilai XOR warna kursor dan warna piksel asli, kemudian garis vertikal dan horizontal digambar pada posisi yang sama menggunakan metode XOR, dan piksel pada garis horizontal dan vertikal digambar kembali. Operasi XOR dengan warna kursor akan menghapus garis horizontal dan vertikal kursor, dan mengembalikan konten asli dalam kontrol gambar.
----Kita juga harus memastikan bahwa ketika mouse berpindah ke kontrol gambar, kursor mouse biasa menghilang dan hanya kursor silang besar yang muncul. Oleh karena itu, properti MousePointer dari kontrol gambar juga harus disetel ke vbCuntom, yang mana ditentukan oleh pengguna. Setelah properti MousePointer dari kontrol gambar diatur ke vbCustom, grafik yang ditentukan pengguna harus dimuat ke properti MouseIcon-nya. Karena kami berharap kontrol gambar hanya memiliki kursor yang kami gambar dan tidak ada kursor lain, jadi kosongkan (). Transparan) grafik kursor. Anda dapat menemukan file kursor, mengeditnya melalui editor sumber daya apa pun, mengisi seluruh grafik kursor dengan transparansi, dan menyimpannya sebagai NoIcon.cur sesuai kebutuhan.
---- Melalui pengaturan dan operasi tombol di atas, kita dapat mewujudkan kursor silang yang besar. Dengan menggunakan metode XOR untuk menggambar, kita juga dapat mencapai efek "karet gelang" yang biasa terlihat pada perangkat lunak menggambar pada umumnya, yaitu, setelah menggunakan mouse untuk menentukan suatu titik, seret mouse secara dinamis untuk menentukan titik lain selama proses secara dinamis menyeret mouse, titik yang akan digambar adalah Grafiknya juga berubah secara dinamis.
---- Di bawah ini kami menggunakan contoh untuk mengimplementasikan sepenuhnya kursor silang besar di kontrol gambar, dan juga mendemonstrasikan cara menggunakan efek "karet gelang" untuk menggambar persegi panjang:
---- Buat proyek EXE standar baru di VB, tambahkan kontrol Gambar ke Form1, dan atur Namanya ke PicDraw. Anda dapat memuat file gambar. Ukuran PicDraw dan ukuran gambar di dalamnya pada dasarnya mencakup sebagian besar Form1 sudah cukup. Kode implementasinya adalah sebagai berikut. Program ini berjalan di VB5.0.
Opsi Eksplisit
PRivateOld_XAsSingle
PribadiOld_YAsSingle
PrivateisMouseDownAsBoolean
PrivateBox_X0AsSingle
PrivateBox_Y0AsSingle
PrivateBox_X1AsSingle
PrivateBox_Y1AsSingle
PrivatePenColorAsLong
PribadiCrossColorAsLong
PrivateSubForm_Load()
Warna Silang=QBColor(8)
Warna Pena=QBWarna(15)
picDraw.DrawMode=vbXorPen
picDraw.MouseIcon=MuatGambar
(Aplikasi.Jalur&"/no.cur")
picDraw.MousePointer=vbKustom
isMouseDown=Salah
Kotak_X0=Kotak_X1=Kotak_Y0=Kotak_Y1=0
Sub Akhir
PrivateSubpicDraw_MouseDown
(TombolAsInteger,
ShiftAsInteger,XAsSingle,YAsSingle)
IfisMouseDown=Benar
'Suatu titik telah ditentukan sebelumnya dengan mouse
Kotak_X1=X
Kotak_Y1=Y
isMouseDown=Salah
picDraw.DrawMode=vbCopyPen
picDraw.Line(Kotak_X0,Kotak_Y0)-
(Kotak_X1,Kotak_Y1),
PenaWarna,B
picDraw.DrawMode=vbXorPen
'Gambarlah kursor
picDraw.Garis(0,Y)-(picDraw.ScaleWidth,Y),
Lintas Warna
picDraw.Line(X,0)-(X,picDraw.ScaleHeight),
Lintas Warna
Lama_X=X
Lama_Y=Y
Kalau tidak
'Mendefinisikan titik sudut pertama dari sebuah persegi panjang, lalu menghapus kursor
picDraw.Line(0,Y)-(picDraw.ScaleWidth,Y),
Lintas Warna
picDraw.Line(X,0)-(X,picDraw.ScaleHeight),
Lintas Warna
Kotak_X0=X
Kotak_Y0=Y
isMouseDown=Benar
AkhirJika
Sub Akhir
PrivateSubpicDraw_MouseMove(ButtonAsInteger,
ShiftAsInteger,XAsSingle,YAsSingle)
IfisMouseDown=Benar
'Seret mouse untuk menentukan titik sudut lain dari persegi panjang,
Pada titik ini hapus persegi panjang sebelumnya dan gambar persegi panjang baru
picDraw.Line(Kotak_X0,Kotak_Y0)-(X_Lama,Y_Lama),
PenaWarna,B
picDraw.Line(Box_X0,Box_Y0)-(X,Y),PenColor,B
Kalau tidak
'Hapus garis kursor lama
picDraw.Line(0,Old_Y)-(picDraw.ScaleWidth,Old_Y),
Lintas Warna
picDraw.Line(Old_X,0)-(Old_X,picDraw.ScaleHeight),
Lintas Warna
'Gambar garis kursor baru
picDraw.Line(0,Y)-(picDraw.ScaleWidth,Y),
Lintas Warna
picDraw.Line(X,0)-(X,picDraw.ScaleHeight),
Lintas Warna
AkhirJika
Lama_X=X
Lama_Y=Y
Sub Akhir->