Tentang Kontrol TipsAlat

Tipsalat muncul secara otomatis, atau muncul, saat pengguna menjeda penunjuk mouse di atas alat atau beberapa elemen UI lainnya. Tipsalat muncul di dekat penunjuk dan menghilang ketika pengguna mengklik tombol mouse, menjauhkan penunjuk dari alat, atau hanya menunggu beberapa detik.

Kontrol tipsalat dalam ilustrasi berikut menampilkan informasi tentang file di desktop Windows. Saat Anda memindahkan mouse di atas ilustrasi, Anda juga akan melihat tipsalat langsung yang berisi teks deskriptif.

screen shot showing text in a tooltip that appears over a file on the desktop

Bagian ini menjelaskan cara kerja kontrol tipsalat dan cara Anda membuatnya.

Perilaku dan Tampilan TipsAlat

Kontrol tipsalat dapat menampilkan satu baris teks atau beberapa baris. Sudutnya dapat dibulatkan atau persegi. Mereka mungkin atau mungkin tidak memiliki batang yang menunjuk ke alat seperti balon ucapan kartun. Teks tipsalat bisa stasioner atau dapat bergerak dengan penunjuk mouse, yang disebut pelacakan. Teks stasioner dapat ditampilkan berdekatan dengan alat atau dapat ditampilkan melalui alat, yang disebut sebagai di tempat. Tipsalat standar bersifat stasioner, menampilkan satu baris teks, memiliki sudut persegi, dan tidak memiliki batang yang menunjuk ke alat.

Tipsalat pelacakan, yang didukung oleh versi 4.70 dari kontrol umum, mengubah posisi pada layar secara dinamis. Dengan memperbarui posisi dengan cepat, kontrol tipsalat ini tampaknya bergerak dengan lancar, atau "melacak." Ini berguna ketika Anda ingin teks tipsalat mengikuti posisi penunjuk mouse saat bergerak. Untuk informasi selengkapnya tentang tipsalat pelacakan dan contoh dengan kode yang menunjukkan cara Anda membuatnya, lihat TipsAlat Pelacakan.

Tipsalat multibaris, yang juga didukung oleh kontrol umum versi 4.70, menampilkan teks pada lebih dari satu baris. Ini berguna untuk menampilkan pesan panjang. Untuk informasi selengkapnya dan contoh yang memperlihatkan cara membuat tipsalat multibaris, lihat TipsAlat Multibaris.

Tipsalat balon ditampilkan dalam kotak dengan sudut bulat dan batang menunjuk ke alat. Mereka dapat berupa satu baris atau multibaris. Ilustrasi berikut menunjukkan tipsalat balon dengan batang dan persegi panjang dalam posisi defaultnya. Untuk informasi selengkapnya tentang tipsalat balon dan contoh yang memperlihatkan cara membuatnya, lihat Menggunakan Kontrol TipsAlat.

screen shot showing a tooltip containing one line of text, positioned above a button on a dialog box

Tipsalat juga dapat memiliki teks judul dan ikon, seperti yang ditunjukkan dalam ilustrasi berikut. Perhatikan bahwa tipsalat harus memiliki teks; jika hanya memiliki teks judul, tipsalat tidak ditampilkan. Ikon juga tidak muncul kecuali ada judul.

screen shot showing a tooltip with an icon, title, and text, positioned below a button on a dialog box

Terkadang string teks diklip karena terlalu panjang untuk ditampilkan sepenuhnya di jendela kecil. Tipsalat di tempat digunakan untuk menampilkan string teks untuk objek yang telah diklip, seperti nama file dalam ilustrasi berikut. Untuk contoh yang menunjukkan cara membuat tipsalat di tempat, lihat TipsAlat Di Tempat.

screen shot showing a tooltip containing a file name positioned next to a file icon in a tree control

Kursor harus mengarahkan kursor ke alat untuk jangka waktu tertentu sebelum tipsalat ditampilkan. Durasi default batas waktu ini dikontrol oleh waktu klik ganda pengguna dan biasanya sekitar satu setengah detik. Untuk menentukan nilai batas waktu non-default, kirim kontrol tipsalat pesan TTM_SETDELAYTIME .

Membuat Kontrol TipsAlat

Untuk membuat kontrol tipsalat, panggil CreateWindowEx dan tentukan kelas jendela TOOLTIPS_CLASS . Kelas ini terdaftar ketika DLL kontrol umum dimuat. Untuk memastikan bahwa DLL ini dimuat, sertakan fungsi InitCommonControlsEx dalam aplikasi Anda. Anda harus secara eksplisit mendefinisikan kontrol tipsalat sebagai yang paling atas. Jika tidak, mungkin ditutupi oleh jendela induk. Fragmen kode berikut menunjukkan cara membuat kontrol tipsalat.

HWND hwndTip = CreateWindowEx(NULL, TOOLTIPS_CLASS, NULL,
                            WS_POPUP | TTS_NOPREFIX | TTS_ALWAYSTIP,
                            CW_USEDEFAULT, CW_USEDEFAULT,
                            CW_USEDEFAULT, CW_USEDEFAULT,
                            hwndParent, NULL, hinstMyDll,
                            NULL);

SetWindowPos(hwndTip, HWND_TOPMOST,0, 0, 0, 0,
             SWP_NOMOVE | SWP_NOSIZE | SWP_NOACTIVATE);

Prosedur jendela untuk kontrol tipsalat secara otomatis mengatur ukuran, posisi, dan visibilitas kontrol. Tinggi jendela tipsalat didasarkan pada tinggi font yang saat ini dipilih ke dalam konteks perangkat untuk kontrol tipsalat. Lebar bervariasi berdasarkan panjang string yang saat ini berada di jendela tipsalat.

Mengaktifkan Kontrol TipsAlat

Kontrol tipsalat dapat aktif atau tidak aktif. Saat aktif, teks tipsalat muncul saat penunjuk mouse berada di alat. Ketika tidak aktif, teks tipsalat tidak muncul, bahkan jika penunjuk berada di alat. Pesan TTM_ACTIVATE mengaktifkan dan menonaktifkan kontrol tipsalat.

Alat Pendukung

Kontrol tipsalat dapat mendukung sejumlah alat. Untuk mendukung alat tertentu, Anda harus mendaftarkan alat dengan kontrol tipsalat dengan mengirim kontrol pesan TTM_ADDTOOL. Pesan ini mencakup alamat struktur TOOLINFO , yang menyediakan informasi yang diperlukan kontrol tipsalat untuk menampilkan teks untuk alat tersebut. Anggota uID dari struktur TOOLINFO didefinisikan oleh aplikasi. Setiap kali Anda menambahkan alat, aplikasi Anda menyediakan pengidentifikasi unik. Anggota cbSize dari struktur TOOLINFO diperlukan, dan harus menentukan ukuran struktur.

Kontrol tipsalat mendukung alat yang diimplementasikan seperti jendela (seperti jendela anak atau jendela kontrol) dan sebagai area persegi panjang dalam area klien jendela. Ketika Anda menambahkan alat yang diimplementasikan sebagai area persegi panjang, anggota hwnd struktur TOOLINFO harus menentukan handel ke jendela yang berisi area, dan anggota rect harus menentukan koordinat klien dari persegi panjang pembatas area. Selain itu, anggota uID harus menentukan pengidentifikasi yang ditentukan aplikasi untuk alat tersebut.

Saat Anda menambahkan alat yang diimplementasikan sebagai jendela, anggota uID struktur TOOLINFO harus berisi handel jendela ke alat. Selain itu , anggota uFlags harus menentukan nilai TTF_IDISHWND , yang memberi tahu kontrol tipsalat untuk menafsirkan anggota uID sebagai handel jendela.

Menampilkan Teks

Saat Anda menambahkan alat ke kontrol tipsalat, anggota lpszText dari struktur TOOLINFO harus menentukan alamat string yang akan ditampilkan untuk alat tersebut. Setelah menambahkan alat, Anda dapat mengubah teks menggunakan pesan TTM_UPDATETIPTEXT.

Jika kata urutan tinggi dari lpszText adalah nol, kata berurutan rendah harus menjadi pengidentifikasi sumber daya string. Ketika kontrol tipsalat membutuhkan teks, sistem memuat sumber daya string yang ditentukan dari instans aplikasi yang diidentifikasi oleh anggota hinst struktur TOOLINFO .

Jika Anda menentukan nilai LPSTR_TEXTCALLBACK dalam anggota lpszText, kontrol tipsalat memberi tahu jendela yang ditentukan dalam anggota hwnd struktur TOOLINFOsetiap kali kontrol tipsalat perlu menampilkan teks untuk alat. Kontrol tipsalat mengirimkan kode pemberitahuan TTN_GETDISPINFO ke jendela. Pesan ini mencakup alamat struktur NMTTDISPINFO , yang berisi handel jendela serta pengidentifikasi yang ditentukan aplikasi untuk alat tersebut. Jendela memeriksa struktur untuk menentukan alat yang teksnya diperlukan, dan mengisi anggota struktur yang sesuai dengan informasi yang diperlukan kontrol tipsalat untuk menampilkan string.

Catatan

Panjang maksimum untuk teks tipsalat standar adalah 80 karakter. Untuk informasi selengkapnya, lihat struktur NMTTDISPINFO. Teks tipsalat multibaris bisa lebih panjang.

 

Banyak aplikasi membuat toolbar yang berisi alat yang sesuai dengan perintah menu. Untuk alat tersebut, lebih mudah bagi kontrol tipsalat untuk menampilkan teks yang sama dengan item menu yang sesuai. Sistem secara otomatis menghapus karakter akselerator ampersand (&) dari semua string yang diteruskan ke kontrol tipsalat, dan mengakhiri string pada karakter tab pertama (\t), kecuali kontrol memiliki gaya TTS_NOPREFIX.

Untuk mengambil teks untuk alat, gunakan pesan TTM_GETTEXT.

Olahpesan dan Pemberitahuan

Teks tipsalat biasanya ditampilkan ketika penunjuk mouse mengarah ke area, biasanya persegi panjang yang ditentukan oleh alat seperti kontrol tombol. Namun, Microsoft Windows hanya mengirim pesan terkait mouse ke jendela yang berisi penunjuk, bukan kontrol tipsalat itu sendiri. Informasi terkait mouse harus disampaikan ke kontrol tipsalat agar dapat menampilkan teks tipsalat pada waktu dan tempat yang sesuai.

Anda dapat menyampaikan pesan secara otomatis jika:

  • Alat ini adalah kontrol atau didefinisikan sebagai persegi panjang dalam struktur TOOLINFO alat.
  • Jendela yang terkait dengan alat ini berada di utas yang sama dengan kontrol tipsalat.

Jika kedua kondisi ini terpenuhi, atur bendera TTF_SUBCLASS di anggota uFlags struktur TOOLINFO alat saat Anda menambahkan alat ke kontrol tipsalat dengan TTM_ADDTOOL. Pesan mouse yang diperlukan kemudian akan disampaikan secara otomatis ke kontrol tipsalat.

Mengatur TTF_SUBCLASS agar pesan mouse disampaikan ke kontrol cukup untuk sebagian besar tujuan. Namun, ini tidak akan berfungsi dalam kasus di mana tidak ada koneksi langsung antara kontrol tipsalat dan jendela alat. Misalnya, jika alat diimplementasikan sebagai area persegi panjang di jendela yang ditentukan aplikasi, prosedur jendela menerima pesan mouse. Pengaturan TTF_SUBCLASS cukup untuk memastikan bahwa mereka diteruskan ke kontrol. Namun, jika alat diimplementasikan sebagai jendela yang ditentukan sistem, pesan mouse dikirim ke jendela tersebut dan tidak tersedia secara langsung untuk aplikasi. Dalam hal ini, Anda harus mensubkelas jendela atau menggunakan kait pesan untuk mengakses pesan mouse. Anda kemudian harus secara eksplisit menyampaikan pesan mouse ke kontrol tipsalat dengan TTM_RELAYEVENT. Untuk contoh cara menggunakan TTM_RELAYEVENT, lihat TipsAlat Pelacakan.

Ketika kontrol tipsalat menerima pesan WM_MOUSEMOVE , kontrol menentukan apakah penunjuk mouse berada di persegi panjang pembatas alat. Jika ya, kontrol tipsalat mengatur timer. Pada akhir interval waktu habis, kontrol tipsalat memeriksa posisi penunjuk untuk melihat apakah telah dipindahkan. Jika belum, kontrol tipsalat mengambil teks untuk alat dan menampilkan tipsalat. Kontrol tipsalat terus menampilkan jendela hingga menerima pesan tombol atas atau tombol-bawah yang disampaikan atau hingga pesan WM_MOUSEMOVE menunjukkan bahwa penunjuk telah bergerak di luar persegi panjang pembatas alat.

Kontrol tipsalat sebenarnya memiliki tiga durasi waktu habis yang terkait dengannya. Durasi awal adalah waktu penunjuk mouse harus tetap stasioner dalam persegi panjang pembatas alat sebelum jendela tipsalat ditampilkan. Durasi reshow adalah panjang penundaan sebelum jendela tipsalat berikutnya ditampilkan ketika penunjuk berpindah dari satu alat ke alat lainnya. Durasi pop-up adalah waktu jendela tipsalat tetap ditampilkan sebelum disembunyikan. Artinya, jika penunjuk tetap stasioner dalam persegi panjang pembatas setelah jendela tipsalat ditampilkan, jendela tipsalat secara otomatis disembunyikan di akhir durasi pop-up. Anda dapat menyesuaikan semua durasi waktu habis dengan menggunakan pesan TTM_SETDELAYTIME.

Jika aplikasi menyertakan alat yang diimplementasikan sebagai area persegi panjang dan ukuran atau posisi perubahan kontrol, aplikasi dapat menggunakan pesan TTM_NEWTOOLRECT untuk melaporkan perubahan ke kontrol tipsalat. Aplikasi tidak perlu melaporkan perubahan ukuran dan posisi untuk alat yang diimplementasikan sebagai jendela karena kontrol tipsalat menggunakan handel jendela alat untuk menentukan apakah penunjuk mouse ada di alat, bukan persegi panjang pembatas alat.

Saat tipsalat akan ditampilkan, kontrol tipsalat mengirimkan jendela pemilik kode pemberitahuan TTN_SHOW . Jendela pemilik menerima kode pemberitahuan TTN_POP ketika tipsalat akan disembunyikan. Setiap kode pemberitahuan dikirim dalam konteks pesan WM_NOTIFY.

Tekan Pengujian

Pesan TTM_HITTEST memungkinkan Anda untuk mengambil informasi yang dipertahankan kontrol tipsalat tentang alat yang menempati titik tertentu. Pesan ini mencakup struktur TTHITTESTINFO yang berisi handel jendela, koordinat titik, dan alamat struktur TOOLINFO. Kontrol tipsalat menentukan apakah alat menempati titik dan, jika ya, mengisi TOOLINFO dengan informasi tentang alat tersebut.

Pemrosesan Pesan Default

Tabel berikut ini menjelaskan pesan yang ditangani oleh prosedur jendela untuk kontrol tipsalat.

Pesan Deskripsi
WM_CREATE Memastikan bahwa kontrol tipsalat memiliki gaya jendela WS_EX_TOOLWINDOW dan WS_POPUP. Ini juga mengalokasikan memori dan menginisialisasi variabel internal.
WM_DESTROY Membebaskan sumber daya yang dialokasikan untuk kontrol tipsalat.
WM_GETFONT Mengembalikan handel font yang akan digunakan kontrol tipsalat untuk menggambar teks.
WM_MOUSEMOVE Menyembunyikan jendela tipsalat.
WM_PAINT Menggambar jendela tipsalat.
WM_SETFONT Mengatur handel font yang akan digunakan kontrol tipsalat untuk menggambar teks.
WM_TIMER Menyembunyikan jendela tipsalat jika alat telah mengubah posisi atau jika penunjuk mouse telah bergerak di luar alat. Jika tidak, ini menunjukkan jendela tipsalat.
WM_WININICHANGE Mengatur ulang variabel internal yang didasarkan pada metrik sistem.