Bagikan melalui


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.

Nilai Makna
TPM_CENTERALIGN
0x0004L
Tengahkan menu pintasan secara horizontal relatif terhadap koordinat yang ditentukan oleh parameter x .
TPM_LEFTALIGN
0x0000L
Memposisikan menu pintasan sehingga sisi kirinya diratakan dengan koordinat yang ditentukan oleh parameter x .
TPM_RIGHTALIGN
0x0008L
Memposisikan menu pintasan sehingga sisi kanannya diratakan dengan koordinat yang ditentukan oleh parameter x .
 

Gunakan salah satu bendera berikut untuk menentukan bagaimana fungsi memosisikan menu pintasan secara vertikal.

Nilai Makna
TPM_BOTTOMALIGN
0x0020L
Memposisikan menu pintasan sehingga sisi bawahnya selaras dengan koordinat yang ditentukan oleh parameter y .
TPM_TOPALIGN
0x0000L
Memposisikan menu pintasan sehingga sisi atasnya selaras dengan koordinat yang ditentukan oleh parameter y .
TPM_VCENTERALIGN
0x0010L
Tengahkan menu pintasan secara vertikal relatif terhadap koordinat yang ditentukan oleh parameter y .
 

Gunakan bendera berikut untuk mengontrol penemuan pilihan pengguna tanpa harus menyiapkan jendela induk untuk menu.

Nilai Makna
TPM_NONOTIFY
0x0080L
Fungsi ini tidak mengirim pesan pemberitahuan ketika pengguna mengklik item menu.
TPM_RETURNCMD
0x0100L
Fungsi mengembalikan pengidentifikasi item menu pilihan pengguna dalam nilai yang dikembalikan.
 

Gunakan salah satu bendera berikut untuk menentukan tombol mouse mana yang dilacak menu pintasan.

Nilai Makna
TPM_LEFTBUTTON
0x0000L
Pengguna dapat memilih item menu hanya dengan tombol kiri mouse.
TPM_RIGHTBUTTON
0x0002L
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.

Nilai Makna
TPM_HORNEGANIMATION
0x0800L
Menganimasikan menu dari kanan ke kiri.
TPM_HORPOSANIMATION
0x0400L
Menganimasikan menu dari kiri ke kanan.
TPM_NOANIMATION
0x4000L
Menampilkan menu tanpa animasi.
TPM_VERNEGANIMATION
0x2000L
Menganimasikan menu dari bawah ke atas.
TPM_VERPOSANIMATION
0x1000L
Menganimasikan menu dari atas ke bawah.
 

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

CreatePopupMenu

GetSubMenu

Menu

Referensi

TrackPopupMenuEx

WM_COMMAND