Fungsi TrackPopupMenu (winuser.h)
Menampilkan menu pintasan pada lokasi yang ditentukan dan melacak pilihan item pada menu. Menu pintasan dapat muncul di mana saja di layar.
Sintaks
BOOL TrackPopupMenu(
[in] HMENU hMenu,
[in] UINT uFlags,
[in] int x,
[in] int y,
[in] int nReserved,
[in] HWND hWnd,
[in, optional] const RECT *prcRect
);
Parameter
[in] hMenu
Jenis: HMENU
Handel ke menu pintasan yang akan ditampilkan. Handel dapat diperoleh dengan memanggil CreatePopupMenu untuk membuat menu pintasan baru, atau dengan memanggil GetSubMenu untuk mengambil handel ke submenu yang terkait dengan item menu yang ada.
[in] uFlags
Jenis: UINT
Gunakan nol dari lebih banyak bendera ini untuk menentukan opsi fungsi.
Gunakan salah satu bendera berikut untuk menentukan bagaimana fungsi memosisikan menu pintasan secara horizontal.
Gunakan salah satu bendera berikut untuk menentukan bagaimana fungsi memosisikan menu pintasan secara vertikal.
Gunakan bendera berikut untuk mengontrol penemuan pilihan pengguna tanpa harus menyiapkan jendela induk untuk menu.
Gunakan salah satu bendera berikut untuk menentukan tombol mouse mana yang dilacak menu pintasan.
Nilai | Makna |
---|---|
|
Pengguna dapat memilih item menu hanya dengan tombol kiri mouse. |
|
Pengguna dapat memilih item menu dengan tombol mouse kiri dan kanan. |
Gunakan kombinasi yang wajar dari bendera berikut untuk memodifikasi animasi menu. Misalnya, dengan memilih bendera horizontal dan vertikal, Anda dapat mencapai animasi diagonal.
Agar animasi apa pun terjadi, fungsi SystemParametersInfo harus mengatur SPI_SETMENUANIMATION. Selain itu, semua bendera TPM_*ANIMASI, kecuali TPM_NOANIMATION, diabaikan jika animasi pudar menu aktif. Untuk informasi selengkapnya, lihat bendera SPI_GETMENUFADE di SystemParametersInfo.
Gunakan bendera TPM_RECURSE untuk menampilkan menu saat menu lain sudah ditampilkan. Ini dimaksudkan untuk mendukung menu konteks dalam menu.
Untuk tata letak teks kanan-ke-kiri, gunakan TPM_LAYOUTRTL. Secara default, tata letak teks adalah kiri-ke-kanan.
[in] x
Jenis: int
Lokasi horizontal menu pintasan, dalam koordinat layar.
[in] y
Jenis: int
Lokasi vertikal menu pintasan, dalam koordinat layar.
[in] nReserved
Jenis: int
Dipesan; harus nol.
[in] hWnd
Jenis: HWND
Handel ke jendela yang memiliki menu pintasan. Jendela ini menerima semua pesan dari menu. Jendela tidak menerima pesan WM_COMMAND dari menu hingga fungsi kembali. Jika Anda menentukan TPM_NONOTIFY dalam parameter uFlags , fungsi tidak mengirim pesan ke jendela yang diidentifikasi oleh hWnd. Namun, Anda masih harus meneruskan handel jendela di hWnd. Ini bisa menjadi handel jendela apa pun dari aplikasi Anda.
[in, optional] prcRect
Jenis: const RECT*
Diabaikan.
Mengembalikan nilai
Jenis: BOOL
Jika Anda menentukan TPM_RETURNCMD dalam parameter uFlags , nilai yang dikembalikan adalah pengidentifikasi item menu item yang dipilih pengguna. Jika pengguna membatalkan menu tanpa membuat pilihan, atau jika terjadi kesalahan, nilai yang dikembalikan adalah nol.
Jika Anda tidak menentukan TPM_RETURNCMD dalam parameter uFlags , nilai yang dikembalikan bukan nol jika fungsi berhasil dan nol jika gagal. Untuk mendapatkan informasi kesalahan yang diperluas, hubungi GetLastError.
Keterangan
Panggil GetSystemMetrics dengan SM_MENUDROPALIGNMENT untuk menentukan bendera perataan horizontal yang benar (TPM_LEFTALIGN atau TPM_RIGHTALIGN) dan/atau bendera arah animasi horizontal (TPM_HORPOSANIMATION atau TPM_HORNEGANIMATION) untuk diteruskan ke TrackPopupMenu atau TrackPopupMenuEx. Ini penting untuk menciptakan pengalaman pengguna yang optimal, terutama saat mengembangkan aplikasi PC Tablet Microsoft.
Untuk menentukan area layar yang tidak boleh tumpang tindih oleh menu, gunakan fungsi TrackPopupMenuEx
Untuk menampilkan menu konteks untuk ikon pemberitahuan, jendela saat ini harus merupakan jendela latar depan sebelum aplikasi memanggil TrackPopupMenu atau TrackPopupMenuEx. Jika tidak, menu tidak akan hilang saat pengguna mengklik di luar menu atau jendela yang membuat menu (jika terlihat). Jika jendela saat ini adalah jendela anak, Anda harus mengatur jendela induk (tingkat atas) sebagai jendela latar depan.
Namun, ketika jendela saat ini adalah jendela latar depan, kedua kalinya menu ini ditampilkan, itu muncul dan kemudian segera menghilang. Untuk memperbaiki ini, Anda harus memaksa pengalihan tugas ke aplikasi yang disebut TrackPopupMenu. Ini dilakukan dengan memposting pesan jinak ke jendela atau utas, seperti yang ditunjukkan dalam sampel kode berikut:
SetForegroundWindow(hDlg);
// Display the menu
TrackPopupMenu( hSubMenu,
TPM_RIGHTBUTTON,
pt.x,
pt.y,
0,
hDlg,
NULL);
PostMessage(hDlg, WM_NULL, 0, 0);
Contoh
Misalnya, lihat Menampilkan Menu Pintasan.
Persyaratan
Klien minimum yang didukung | Windows 2000 Professional [hanya aplikasi desktop] |
Server minimum yang didukung | Windows 2000 Server [hanya aplikasi desktop] |
Target Platform | Windows |
Header | winuser.h (termasuk Windows.h) |
Pustaka | User32.lib |
DLL | User32.dll |
Set API | ext-ms-win-ntuser-menu-l1-1-0 (diperkenalkan di Windows 8) |
Lihat juga
Konseptual
Referensi