Menggunakan Pelengkapan Otomatis

Pelengkapan otomatis memperluas string yang telah dimasukkan sebagian dalam kontrol edit ke dalam string lengkap. Misalnya, ketika pengguna mulai memasukkan URL di kontrol Edit alamat yang disematkan di toolbar Windows Internet Explorer, pelengkapan otomatis memperluas string menjadi satu atau beberapa opsi URL lengkap yang konsisten dengan string parsial yang ada. String URL parsial seperti "mikrofon" mungkin diperluas ke "https://www.microsoft.com" atau "https://www.microsoft.com/windows". Pelengkapan otomatis biasanya digunakan dengan kontrol edit atau dengan kontrol yang memiliki kontrol edit tersemat, seperti kontrol ComboBoxEx .

Menambahkan Fungsionalitas Lengkapi Otomatis ke Aplikasi Anda

Aplikasi dapat menambahkan fungsionalitas pelengkapan otomatis ke kontrol edit dengan dua cara:

  • SHAutoComplete adalah fungsi sederhana yang dapat melengkapi jalur file atau URL secara otomatis.
  • Antarmuka IAutoComplete diekspos oleh objek pelengkapan otomatis (CLSID_AutoComplete). Ini memungkinkan aplikasi untuk menginisialisasi, mengaktifkan, dan menonaktifkan objek. IAutoComplete memungkinkan lebih banyak kontrol atas sumber lengkapi otomatis, termasuk kemampuan untuk menambahkan sumber kustom. Sisa topik ini membahas penggunaan IAutoComplete. Lihat Cara Mengaktifkan Pelengkapan Otomatis Secara Manual untuk contoh penggunaan tertentu.

Mode Lengkapi Otomatis

Saat menggunakan IAutoComplete, pelengkapan otomatis dapat menampilkan string yang diselesaikan dalam dua mode: autoappend dan autosuggest. Modenya independen; Anda dapat mengaktifkan salah satu atau keduanya. Untuk menentukan mode, panggil IAutoComplete2::SetOptions.

Autoappend

Dalam mode autoappend, pelengkapan otomatis menambahkan sisa string kandidat yang paling mungkin ke karakter yang ada, menyoroti karakter yang ditambahkan. Jika pengguna terus memasukkan karakter, mereka ditambahkan ke string parsial yang ada. Jika pengguna menambahkan karakter yang identik dengan karakter yang disorot berikutnya, penyorotan untuk karakter tersebut dinonaktifkan. Karakter yang tersisa masih akan disorot. Jika pengguna menambahkan karakter yang tidak cocok dengan karakter yang disorot berikutnya, pelengkapan otomatis mencoba menghasilkan string kandidat baru berdasarkan string parsial yang lebih besar dan menambahkan sisa string kandidat baru ke string parsial saat ini. Jika tidak ada string kandidat yang dapat ditemukan, hanya karakter yang ditik yang muncul dan kotak edit bertingkah seperti biasanya tanpa pelengkapan otomatis. Proses ini berlanjut hingga pengguna menerima string.

Autosuggest

Dalam mode autosuggest, pelengkapan otomatis menampilkan daftar drop-down, dengan satu atau beberapa string lengkap yang disarankan, di bawah kontrol edit. Pengguna dapat memilih salah satu string yang disarankan atau terus mengetik. Saat pengetikan berlangsung, daftar drop-down mungkin dimodifikasi berdasarkan string parsial saat ini. Jika Anda mengatur bendera ACO_SEARCH di IAutoComplete2::SetOptions, lengkapi otomatis menyediakan opsi, di bagian bawah daftar drop-down, untuk mencari string parsial saat ini. Opsi ini ditampilkan meskipun tidak ada string yang disarankan. Jika pengguna memilih opsi pencarian, aplikasi Anda harus meluncurkan mesin pencari untuk membantu pengguna.

Menggunakan Sumber Lengkapi Otomatis yang Telah Ditentukan Sebelumnya

Pelengkapan otomatis tergantung pada memiliki sumber yang menyediakannya dengan string untuk dicocokkan dengan string parsial pengguna. Anda memiliki opsi untuk menyediakan sumber lengkapiotomatis kustom, tetapi beberapa sumber yang paling umum disediakan oleh sistem.

CLSID_ACLHistory

Sumber lengkapi otomatis yang cocok dengan daftar URL di daftar Riwayat pengguna.

CLSID_ACLMRU

Sumber lengkapi otomatis yang cocok dengan daftar URL di daftar Pengguna yang Baru Digunakan.

CLSID_ACListISF

Sumber lengkapi otomatis yang cocok dengan item di namespace Shell: file di komputer pengguna serta item di folder virtual seperti Panel Kontrol.

Ada kalanya, daripada segera membebaskan sumber daya, Anda mungkin ingin mempertahankan penunjuk antarmuka ke berbagai objek yang terlibat dalam pelengkapan otomatis. Secara khusus, ini dilakukan ketika Anda ingin menyesuaikan perilaku pelengkapan otomatis secara dinamis. Contoh yang paling umum dari ini terjadi saat menggunakan objek CLSID_ACListISF, yang dilengkapi secara otomatis dari namespace Shell dan memiliki opsi (ACLO_CURRENTDIR) menghitung dari direktori saat ini juga. Misalnya, ketika Anda menavigasi ke folder baru, Internet Explorer mengubah direktori bilah Alamat saat ini dan oleh karena itu pengaturan perlu diubah secara dinamis. Ada dua cara untuk menentukan direktori yang harus diperlakukan objek CLSID_ACListISF sebagai direktori saat ini:

Dalam hal berikut, asumsikan bahwa sobat adalah penunjuk ke antarmuka IACList dari objek CLSID_ACListISF:

  • Menggunakan IPersistFolder:

    Untuk memberi tahu objek CLSID_ACListISF bahwa ITEMIDLIST tertentu harus diperlakukan sebagai direktori saat ini, Anda dapat menggunakan antarmuka IPersistFolder objek. Karena ITEMIDLIST dapat merujuk ke folder virtual, metode ini lebih fleksibel daripada menggunakan ICurrentWorkingDirectory.

    Perhatikan bahwa contoh berikut menggunakan QueryInterface templat, yang memungkinkan daftar parameter yang disederhanakan.

    IPersistFolder *ppf;
    
    hr = pal2->QueryInterface(IID_PPV_ARGS(&ppf));   
    if (SUCCEEDED(hr))
    {
        hr = ppf->Initialize(pidlCurrentDirectory);
        ppf->Release();
    }
    
  • Menggunakan ICurrentWorkingDirectory:

    Untuk memberi objek CLSID_ACListISF jalur sebagai direktori saat ini, Anda dapat menggunakan antarmuka ICurrentWorkingDirectory objek.

    WCHAR pwszDirectory[MAX_PATH] = L"C:\\Program Files";
    ICurrentWorkingDirectory *pcwd;
    
    hr = pal2->QueryInterface(IID_PPV_ARGS(&pcwd));    
    if (SUCCEEDED(hr))
    {
        hr = pcwd->SetDirectory(pwszDirectory);
        pcwd->Release();
    }