Bagikan melalui


Pemberitahuan dan Area Pemberitahuan

Area pemberitahuan adalah bagian dari taskbar yang menyediakan sumber sementara untuk pemberitahuan dan status. Ini juga dapat digunakan untuk menampilkan ikon untuk fitur sistem dan program yang tidak memiliki kehadiran di desktop, seperti tingkat baterai, kontrol volume, dan status jaringan. Area pemberitahuan telah dikenal secara historis sebagai baki sistem atau area status.

Topik ini berisi bagian berikut:

Panduan Area Pemberitahuan dan Pemberitahuan

Lihat bagian Pemberitahuan dan Area Pemberitahuan dari Panduan Interaksi Pengalaman Pengguna Windows untuk praktik terbaik dalam penggunaan pemberitahuan dan area pemberitahuan. Tujuannya adalah untuk memberikan manfaat kepada pengguna melalui penggunaan pemberitahuan yang sesuai, tanpa mengganggu atau mengganggu.

Area pemberitahuan bukan untuk informasi penting yang harus segera ditindaklanjuti. Ini juga tidak ditujukan untuk program cepat atau akses perintah. Pada Windows 7, sebagian besar fungsionalitas tersebut paling baik dicapai melalui tombol taskbar aplikasi.

Windows 7 memungkinkan pengguna untuk menekan semua pemberitahuan dari aplikasi jika mereka memilih, sehingga desain pemberitahuan yang bijaksana dan penggunaan akan menyerbu pengguna untuk memungkinkan aplikasi Anda terus menampilkannya. Pemberitahuan adalah gangguan; memastikan bahwa mereka sepadan.

Windows 7 memperkenalkan konsep "waktu tenang". Waktu tenang didefinisikan sebagai jam pertama setelah pengguna baru masuk ke akunnya baik untuk pertama kalinya atau untuk pertama kalinya setelah peningkatan sistem operasi atau instalasi bersih. Kali ini disisihkan untuk memungkinkan pengguna menjelajahi dan membiasakan diri dengan lingkungan baru tanpa gangguan pemberitahuan. Selama waktu ini, sebagian besar pemberitahuan tidak boleh dikirim atau ditampilkan. Pengecualian mencakup umpan balik yang diharapkan pengguna untuk melihat sebagai respons terhadap tindakan pengguna, seperti ketika dia mencolokkan perangkat USB atau mencetak dokumen. Spesifikasi API mengenai waktu tenang dibahas nanti dalam topik ini.

Membuat dan Menampilkan Pemberitahuan

Bagian yang tersisa dalam topik ini menguraikan prosedur dasar yang harus diikuti untuk menampilkan pemberitahuan dari aplikasi Anda kepada pengguna.

  1. Tambahkan Ikon Pemberitahuan
  2. Tentukan Versi NOTIFYICONDATA
  3. Tentukan Tampilan dan Konten Pemberitahuan
  4. Periksa Status Pengguna
  5. Menampilkan Pemberitahuan
  6. Menghapus Ikon

Tambahkan Ikon Pemberitahuan

Untuk menampilkan pemberitahuan, Anda harus memiliki ikon di area pemberitahuan. Dalam kasus tertentu, seperti Microsoft Communicator atau tingkat baterai, ikon tersebut sudah akan ada. Namun, dalam banyak kasus lain, Anda akan menambahkan ikon ke area pemberitahuan hanya selama diperlukan untuk menampilkan pemberitahuan. Dalam kedua kasus, ini dicapai menggunakan fungsi Shell_NotifyIcon. Shell_NotifyIcon memungkinkan Anda menambahkan, memodifikasi, atau menghapus ikon di area pemberitahuan.

area pemberitahuan yang berisi tiga ikon

Ketika ikon ditambahkan ke area pemberitahuan pada Windows 7, ikon ditambahkan ke bagian luapan area pemberitahuan secara default. Area ini berisi ikon area pemberitahuan yang aktif, tetapi tidak terlihat di area pemberitahuan. Hanya pengguna yang dapat mempromosikan ikon dari luapan ke area pemberitahuan, meskipun dalam keadaan tertentu sistem dapat mempromosikan ikon untuk sementara ke area pemberitahuan sebagai pratinjau singkat (di bawah satu menit).

Catatan

Pengguna harus memiliki pernyataan akhir tentang ikon mana yang ingin mereka lihat di area pemberitahuan mereka. Sebelum menginstal ikon non-sementara di area pemberitahuan, pengguna harus dimintai izin. Mereka juga harus diberi opsi (biasanya meskipun menu pintasannya) untuk menghapus ikon dari area pemberitahuan.

 

Struktur NOTIFYICONDATA yang dikirim dalam panggilan ke Shell_NotifyIcon berisi informasi yang menentukan ikon area pemberitahuan dan pemberitahuan itu sendiri. Berikut ini adalah item-item khusus untuk ikon area pemberitahuan itu sendiri yang dapat diatur melalui NOTIFYICONDATA.

  • Sumber daya tempat ikon diambil.
  • Pengidentifikasi unik untuk ikon tersebut.
  • Gaya tipsalat ikon.
  • Status ikon (tersembunyi, dibagikan, atau keduanya) di area pemberitahuan.
  • Handel jendela aplikasi yang terkait dengan ikon.
  • Pengidentifikasi pesan panggilan balik yang memungkinkan ikon untuk mengkomunikasikan peristiwa yang terjadi dalam persegi panjang batas ikon dan pemberitahuan balon dengan jendela aplikasi terkait. Persegi panjang pembatas ikon dapat diambil melalui Shell_NotifyIconGetRect.

Setiap ikon di area pemberitahuan dapat diidentifikasi dengan dua cara:

  • GUID yang ikonnya dideklarasikan dalam registri. Ini adalah metode yang disukai pada Windows 7 dan yang lebih baru.
  • Handel jendela yang terkait dengan ikon area pemberitahuan, ditambah pengidentifikasi ikon yang ditentukan aplikasi. Metode ini digunakan pada Windows Vista dan yang lebih lama.

Ikon di area pemberitahuan dapat memiliki tipsalat. Tipsalat dapat berupa tipsalat standar (lebih disukai) atau antarmuka pengguna pop-up yang digambar aplikasi. Meskipun tipsalat tidak diperlukan, disarankan.

Ikon area pemberitahuan harus mengetahui DPI tinggi. Aplikasi harus menyediakan ikon piksel 16x16 dan ikon 32x32 dalam file sumber dayanya, lalu menggunakan LoadIconMetric untuk memastikan bahwa ikon yang benar dimuat dan diskalakan dengan tepat.

Aplikasi yang bertanggung jawab atas ikon area pemberitahuan harus menangani klik mouse untuk ikon tersebut. Saat pengguna mengklik kanan ikon, ikon tersebut akan memunculkan menu pintasan normal. Namun, hasil satu klik dengan tombol mouse kiri akan bervariasi dengan fungsi ikon. Ini akan menampilkan apa yang diharapkan pengguna untuk melihat dalam formulir yang paling cocok untuk konten tersebut—jendela popup, kotak dialog, atau jendela program itu sendiri. Misalnya, ini dapat menampilkan teks status untuk ikon status, atau slider untuk kontrol volume.

Penempatan jendela popup atau kotak dialog yang dihasilkan dari klik harus ditempatkan di dekat koordinat klik di area pemberitahuan. Gunakan CalculatePopupWindowPosition untuk menentukan lokasinya.

Ikon dapat ditambahkan ke area pemberitahuan tanpa menampilkan pemberitahuan dengan hanya menentukan anggota khusus ikon NOTIFYICONDATA (dibahas di atas) dan memanggil Shell_NotifyIcon seperti yang ditunjukkan di sini:

NOTIFYICONDATA nid = {};
// Do NOT set the NIF_INFO flag.
...                    
Shell_NotifyIcon(NIM_ADD, &nid);

Anda juga dapat menambahkan ikon ke area pemberitahuan dan menampilkan pemberitahuan semuanya dalam satu panggilan ke Shell_NotifyIcon. Untuk melakukannya, lanjutkan dengan instruksi dalam topik ini.

Tentukan Versi NOTIFYICONDATA

Seiring kemajuan Windows, struktur NOTIFYICONDATA telah diperluas untuk menyertakan lebih banyak anggota untuk menentukan lebih banyak fungsionalitas. Konstanta digunakan untuk mendeklarasikan versi NOTIFYICONDATA mana yang akan digunakan dengan ikon area pemberitahuan Anda, untuk memungkinkan kompatibilitas mundur. Kecuali ada alasan kuat untuk melakukan sebaliknya, sangat disarankan agar Anda menggunakan versi NOTIFYICON_VERSION_4, yang diperkenalkan di Windows Vista. Versi ini menyediakan fungsionalitas lengkap yang tersedia, termasuk kemampuan yang disukai untuk mengidentifikasi ikon area pemberitahuan melalui GUID terdaftar, mekanisme panggilan balik yang unggul, dan aksesibilitas yang lebih baik.

Atur versi melalui panggilan berikut:

NOTIFYICONDATA nid = {};
... 
nid.uVersion = NOTIFYICON_VERSION_4;
// Add the icon
Shell_NotifyIcon(NIM_ADD, &nid);
// Set the version
Shell_NotifyIcon(NIM_SETVERSION, &nid);

Perhatikan bahwa panggilan ke Shell_NotifyIcon ini tidak menampilkan pemberitahuan.

Tentukan Tampilan dan Konten Pemberitahuan

Pemberitahuan adalah jenis khusus kontrol tipsalat balon. Ini berisi judul, teks isi, dan ikon. Seperti jendela, jendela memiliki tombol Tutup di sudut kanan atasnya. Ini juga berisi tombol Opsi yang membuka item Ikon Area Pemberitahuan di Panel Kontrol, yang memungkinkan pengguna untuk menampilkan atau menyembunyikan ikon atau hanya menampilkan pemberitahuan tanpa ikon.

cuplikan layar balon pemberitahuan yang menunjukkan bahwa daya baterai rendah

Struktur NOTIFYICONDATA yang dikirim dalam panggilan ke Shell_NotifyIcon berisi informasi yang menentukan ikon area pemberitahuan dan balon pemberitahuan itu sendiri. Berikut ini adalah item-item khusus untuk pemberitahuan yang dapat diatur melalui NOTIFYICONDATA.

  • Ikon untuk ditampilkan di balon pemberitahuan, yang ditentukan oleh jenis pemberitahuan. Ukuran ikon dapat ditentukan, serta ikon kustom.
  • Judul pemberitahuan. Judul ini harus memiliki panjang maksimal 48 karakter dalam bahasa Inggris (untuk mengakomodasi pelokalan). Judul adalah baris pertama pemberitahuan, dan dipisahkan melalui penggunaan ukuran font, warna, dan berat.
  • Teks untuk digunakan dalam isi pemberitahuan. Teks ini harus maksimal 200 karakter dalam bahasa Inggris (untuk mengakomodasi pelokalan).
  • Apakah pemberitahuan harus dibuang jika tidak dapat segera ditampilkan.
  • Batas waktu untuk pemberitahuan. Pengaturan ini diabaikan di Windows Vista dan sistem yang lebih baru demi pengaturan batas waktu aksesibilitas di seluruh sistem.
  • Apakah pemberitahuan harus menghormati waktu tenang, atur melalui bendera NIIF_RESPECT_QUIET_TIME.

Catatan

Antarmuka IUserNotification dan IUserNotification2 adalah pembungkus Model Objek Komponen (COM) untuk Shell_NotifyIcon. Namun, saat ini, mereka tidak menyediakan fungsionalitas NOTIFYICON_VERSION_4 lengkap yang tersedia melalui Shell_NotifyIcon secara langsung, termasuk penggunaan GUID untuk mengidentifikasi ikon area pemberitahuan.

 

Periksa Status Pengguna

Sistem menggunakan fungsi SHQueryUserNotificationState digunakan untuk memeriksa apakah pengguna berada dalam waktu tenang, jauh dari komputer, atau dalam keadaan tidak dapat diganggu seperti mode Presentasi. Apakah sistem menampilkan pemberitahuan Anda bergantung pada status ini.

Catatan

Jika aplikasi Anda menggunakan metode pemberitahuan kustom yang tidak menggunakan Shell_NotifyIcon, IUserNotification, atau IUserNotification2, aplikasi tersebut harus selalu secara eksplisit memanggil SHQueryUserNotificationState untuk menentukan apakah aplikasi harus menampilkan UI pemberitahuan pada saat itu.

 

Pemberitahuan yang dikirim ketika pengguna tidak di tempat diantrekan untuk ditampilkan, tetapi karena Anda tidak dapat mengetahui kapan pengguna akan kembali atau apakah pemberitahuan masih akan valid pada saat itu, Anda mungkin mempertimbangkan untuk mengirim ulang pemberitahuan nanti.

Pemberitahuan yang dikirim selama waktu tenang dibuang secara tidak terkirim. Panduan desain meminta agar semua pemberitahuan tidak dapat diabaikan. Mereka seharusnya tidak memerlukan tindakan pengguna segera. Oleh karena itu, tidak ada pemberitahuan yang begitu penting sehingga harus mengambil alih waktu tenang.

Menampilkan Pemberitahuan

Setelah Anda mengatur versi NOTIFYICONDATA dan menentukan pemberitahuan dalam struktur NOTIFYICONDATA, panggil Shell_NotifyIcon untuk menampilkan ikon.

  • Jika ikon area pemberitahuan tidak ada, panggil Shell_NotifyIcon untuk menambahkan ikon. Lakukan ini untuk ikon sementara dan non-sementara.

    NOTIFYICONDATA nid = {};
    ...                    
    Shell_NotifyIcon(NIM_ADD, &nid);
    
  • Jika ikon area pemberitahuan sudah ada, panggil Shell_NotifyIcon untuk mengubah ikon.

    NOTIFYICONDATA nid = {};
    ...                    
    Shell_NotifyIcon(NIM_MODIFY, &nid);
    

Kode berikut menunjukkan contoh pengaturan data NOTIFYICONDATA dan mengirimkannya melalui Shell_NotifyIcon. Perhatikan bahwa contoh ini mengidentifikasi ikon pemberitahuan melalui GUID (lebih disukai di Windows 7).

// Declare NOTIFYICONDATA details. 
    // Error handling is omitted here for brevity. Do not omit it in your code.
    
    NOTIFYICONDATA nid = {};
    nid.cbSize = sizeof(nid);
    nid.hWnd = hWnd;
    nid.uFlags = NIF_ICON | NIF_TIP | NIF_GUID;
    
    // Note: This is an example GUID only and should not be used.
    // Normally, you should use a GUID-generating tool to provide the value to
    // assign to guidItem.
    static const GUID myGUID = 
    {0x23977b55, 0x10e0, 0x4041, {0xb8, 0x62, 0xb1, 0x95, 0x41, 0x96, 0x36, 0x69}};
    nid.guidItem = myGUID;
    
    // This text will be shown as the icon's tooltip.
    StringCchCopy(nid.szTip, ARRAYSIZE(nid.szTip), L"Test application");
    
    // Load the icon for high DPI.
    LoadIconMetric(hInst, MAKEINTRESOURCE(IDI_SMALL), LIM_SMALL, &(nid.hIcon));
    
    // Show the notification.
    Shell_NotifyIcon(NIM_ADD, &nid) ? S_OK : E_FAIL;

Menghapus Ikon

Untuk menghapus ikon—misalnya, saat Anda hanya menambahkan ikon untuk sementara waktu untuk menyiarkan pemberitahuan—panggil Shell_NotifyIconseperti yang ditunjukkan di sini. Hanya struktur NOTIFYICONDATA minimal yang mengidentifikasi ikon yang diperlukan dalam panggilan ini.

NOTIFYICONDATA nid = {};
...                    
Shell_NotifyIcon(NIM_DELETE, &nid);

Catatan

Saat aplikasi dihapus instalannya, ikon area pemberitahuannya masih dapat muncul kepada pengguna sebagai opsi di halaman Ikon Area Pemberitahuan di Panel Kontrol hingga tujuh hari. Namun, setiap perubahan yang dilakukan di sana tidak akan berpengaruh.

 

Sampel SDK

Lihat Sampel NotificationIcon di Windows Software Development Kit (SDK) untuk contoh lengkap penggunaan Shell_NotifyIcon.

Shell_NotifyIcon

Shell_NotifyIconGetRect

NOTIFYICONDATA

SHQueryUserNotificationState

IUserNotification

IUserNotification2

Bilah tugas

Ekstensi Bilah Tugas