Bagikan melalui


Cara Menerapkan TipsAlat Di Tempat

Tipsalat di tempat digunakan untuk menampilkan string teks untuk objek yang telah diklip. Untuk ilustrasi, lihat Tentang Kontrol TipsAlat.

Perbedaan antara tipsalat biasa dan di tempat adalah posisi. Secara default, ketika penunjuk mouse mengarah ke wilayah yang memiliki tipsalat yang terkait dengannya, tipsalat ditampilkan berdekatan dengan wilayah. Namun, tipsalat adalah jendela, dan dapat diposisikan di mana saja yang Anda pilih dengan memanggil SetWindowPos. Membuat tipsalat di tempat adalah masalah memposisikan jendela tipsalat sehingga melapisi string teks.

Apa yang perlu Anda ketahui

Teknologi

Prasyarat

  • C/C++
  • Pemrograman Antarmuka Pengguna Windows

Petunjuk

Memposisikan TipsAlat Di Tempat

Anda perlu melacak tiga persegi panjang saat memosisikan tipsalat di tempat:

  1. Persegi panjang yang mengelilingi teks label lengkap.
  2. Persegi panjang yang mengelilingi teks tipsalat. Teks tipsalat identik dengan teks label lengkap, dan biasanya ukuran dan font yang sama. Dua persegi panjang teks biasanya akan berukuran sama.
  3. Persegi panjang jendela tipsalat. Persegi panjang ini agak lebih besar dari persegi panjang teks tipsalat yang diapitnya.

Tiga persegi panjang ditampilkan secara skema dalam ilustrasi berikut. Bagian tersembunyi dari teks label ditunjukkan oleh latar belakang abu-abu.

diagram showing a long string, half of which has a gray background, then the same string within a larger tooltip window rectangle

Untuk membuat tipsalat di tempat, Anda harus memosisikan persegi panjang teks tipsalat sehingga melapisi persegi teks label. Prosedur untuk menyelaraskan dua persegi panjang relatif mudah:

  1. Tentukan persegi panjang teks label.
  2. Posisikan jendela tipsalat sehingga teks persegi panjang tipsalat melapisi persegi panjang teks label.

Dalam praktiknya, biasanya cukup untuk menyelaraskan sudut kiri atas dua persegi panjang teks. Mencoba mengubah ukuran persegi panjang teks tipsalat agar sama persis dengan persegi panjang teks label dapat menyebabkan masalah dengan tampilan tipsalat.

Masalah dengan skema sederhana ini adalah Anda tidak dapat memosisikan persegi panjang teks tipsalat secara langsung. Sebagai gantinya, Anda harus memosisikan persegi panjang jendela tipsalat cukup jauh di atas dan di sebelah kiri persegi panjang teks label sehingga sudut dua persegi panjang teks bertepatan. Dengan kata lain, Anda perlu mengetahui offset antara persegi panjang jendela tipsalat dan persegi panjang teks yang diapit. Secara umum, tidak ada cara sederhana untuk menentukan offset ini.

Menerapkan TipsAlat Di Tempat

Fragmen kode berikut mengilustrasikan cara menggunakan pesan TTM_ADJUSTRECT di handler TTN_SHOW untuk menampilkan tipsalat di tempat. Aplikasi Anda menunjukkan bahwa teks label dipotong dengan mengatur variabel fMyStringIsTruncated privat ke TRUE. Handler memanggil fungsi yang ditentukan aplikasi, GetMyItemRect, untuk mengambil persegi panjang teks label. Persegi panjang ini diteruskan ke kontrol tipsalat dengan TTM_ADJUSTRECT, yang mengembalikan persegi panjang jendela yang sesuai. SetWindowPos kemudian dipanggil untuk memosisikan tipsalat di atas label.

case TTN_SHOW:
            
    if (fMyStringIsTruncated) 
    {
        RECT rc;
        
        GetMyItemRect(&rc);
        
        SendMessage(hwndToolTip, TTM_ADJUSTRECT, TRUE, (LPARAM)&rc);
        
        SetWindowPos(hwndToolTip, NULL, rc.left, rc.top, 0, 0, 
                     SWP_NOSIZE | SWP_NOZORDER | SWP_NOACTIVATE);
    }

Contoh ini tidak mengubah ukuran tipsalat, hanya posisinya. Dua persegi panjang teks diratakan di sudut kiri atasnya, tetapi tidak harus dengan dimensi yang sama. Dalam praktiknya, perbedaannya biasanya kecil, dan pendekatan ini direkomendasikan untuk sebagian besar tujuan. Meskipun Anda dapat, pada prinsipnya, gunakan SetWindowPos untuk mengubah ukuran serta memposisikan ulang tipsalat, melakukannya mungkin memiliki konsekuensi yang tidak dapat diprediksi.

Keterangan

Kontrol umum versi 5.80 menyederhanakan penggunaan tipsalat di tempat dengan penambahan pesan baru, TTM_ADJUSTRECT. Kirim pesan ini dengan koordinat persegi panjang teks label yang Anda inginkan agar tipsalat dilapisi, dan mengembalikan koordinat persegi panjang jendela tipsalat yang diposisikan dengan tepat.

Menggunakan Kontrol TipsAlat