WM_SYSCOMMAND pesan
Jendela menerima pesan ini ketika pengguna memilih perintah dari menu Jendela (sebelumnya dikenal sebagai sistem atau menu kontrol) atau ketika pengguna memilih tombol maksimalkan, minimalkan tombol, tombol pulihkan, atau tombol tutup.
#define WM_SYSCOMMAND 0x0112
case WM_SYSCOMMAND:
if ((wParam & 0xFFF0) == SC_CLOSE)
{
EndDialog (hDlg, TRUE);
return(TRUE);
}
break;
Contoh dari Sampel Klasik Windows di GitHub.
-
wParam
-
Jenis perintah sistem yang diminta. Parameter ini bisa menjadi salah satu nilai berikut.
Nilai Makna - SC_CLOSE
- 0xF060
Menutup jendela. - SC_CONTEXTHELP
- 0xF180
Mengubah kursor menjadi tanda tanya dengan penunjuk. Jika pengguna kemudian mengklik kontrol dalam kotak dialog, kontrol akan menerima pesan WM_HELP . - SC_DEFAULT
- 0xF160
Memilih item default; pengguna mengklik dua kali menu jendela. - SC_HOTKEY
- 0xF150
Mengaktifkan jendela yang terkait dengan hot key yang ditentukan aplikasi. Parameter lParam mengidentifikasi jendela untuk diaktifkan. - SC_HSCROLL
- 0xF080
Menggulir secara horizontal. - SCF_ISSECURE
- 0x00000001
Menunjukkan apakah pengaman layar aman. - SC_KEYMENU
- 0xF100
Mengambil menu jendela sebagai akibat dari penekanan tombol. Untuk informasi lebih lanjut, lihat bagian Keterangan. - SC_MAXIMIZE
- 0xF030
Memaksimalkan jendela. - SC_MINIMIZE
- 0xF020
Meminimalkan jendela. - SC_MONITORPOWER
- 0xF170
Mengatur status tampilan. Perintah ini mendukung perangkat yang memiliki fitur hemat daya, seperti komputer pribadi bertenaga baterai.
Parameter lParam dapat memiliki nilai berikut:- -1 (layar menyala)
- 1 (layar akan ke daya rendah)
- 2 (tampilan sedang dimatikan)
- SC_MOUSEMENU
- 0xF090
Mengambil menu jendela sebagai hasil dari klik mouse. - SC_MOVE
- 0xF010
Memindahkan jendela. - SC_NEXTWINDOW
- 0xF040
Berpindah ke jendela berikutnya. - SC_PREVWINDOW
- 0xF050
Berpindah ke jendela sebelumnya. - SC_RESTORE
- 0xF120
Memulihkan jendela ke posisi dan ukuran normalnya. - SC_SCREENSAVE
- 0xF140
Menjalankan aplikasi pengaman layar yang ditentukan di bagian [boot] dari file System.ini. - SC_SIZE
- 0xF000
Mengukur jendela. - SC_TASKLIST
- 0xF130
Mengaktifkan menu Mulai . - SC_VSCROLL
- 0xF070
Menggulir secara vertikal. -
lParam
-
Kata berurutan rendah menentukan posisi horizontal kursor, dalam koordinat layar, jika perintah menu jendela dipilih dengan mouse. Jika tidak, parameter ini tidak digunakan.
Kata berurutan tinggi menentukan posisi vertikal kursor, dalam koordinat layar, jika perintah menu jendela dipilih dengan mouse. Parameter ini adalah 1 jika perintah dipilih menggunakan akselerator sistem, atau nol jika menggunakan mnemonic.
Aplikasi harus mengembalikan nol jika memproses pesan ini.
Untuk mendapatkan koordinat posisi dalam koordinat layar, gunakan kode berikut:
xPos = GET_X_LPARAM(lParam); // horizontal position
yPos = GET_Y_LPARAM(lParam); // vertical position
Fungsi DefWindowProc melakukan permintaan menu jendela untuk tindakan yang telah ditentukan sebelumnya yang ditentukan dalam tabel sebelumnya.
Dalam pesan WM_SYSCOMMAND , empat bit berurutan rendah dari parameter wParam digunakan secara internal oleh sistem. Untuk mendapatkan hasil yang benar saat menguji nilai wParam, aplikasi harus menggabungkan nilai 0xFFF0 dengan nilai wParam dengan menggunakan operator AND bitwise.
Item menu dalam menu jendela dapat dimodifikasi dengan menggunakan fungsi GetSystemMenu, AppendMenu, InsertMenu, ModifyMenu, InsertMenuItem, dan SetMenuItemInfo . Aplikasi yang mengubah menu jendela harus memproses WM_SYSCOMMAND pesan.
Aplikasi dapat melakukan perintah sistem apa pun kapan saja dengan meneruskan pesan WM_SYSCOMMAND ke DefWindowProc. Setiap pesan WM_SYSCOMMAND yang tidak ditangani oleh aplikasi harus diteruskan ke DefWindowProc. Nilai perintah apa pun yang ditambahkan oleh aplikasi harus diproses oleh aplikasi dan tidak dapat diteruskan ke DefWindowProc.
Jika perlindungan kata sandi diaktifkan oleh kebijakan, pengaman layar dimulai terlepas dari apa yang dilakukan aplikasi dengan pemberitahuan SC_SCREENSAVE bahkan jika gagal meneruskannya ke DefWindowProc.
Kunci akselerator yang ditentukan untuk memilih item dari menu jendela diterjemahkan ke dalam pesan WM_SYSCOMMAND ; semua penekanan tombol akselerator lainnya diterjemahkan ke dalam pesan WM_COMMAND .
Jika wParamSC_KEYMENU, lParam berisi kode karakter kunci yang digunakan dengan tombol ALT untuk menampilkan menu popup. Misalnya, menekan ALT+F untuk menampilkan popup File akan menyebabkan WM_SYSCOMMAND dengan wParam sama dengan SC_KEYMENU dan lParam sama dengan 'f'.
Persyaratan | Nilai |
---|---|
Klien minimum yang didukung |
Windows 2000 Professional [hanya aplikasi desktop] |
Server minimum yang didukung |
Windows 2000 Server [hanya aplikasi desktop] |
Header |
|
-
Referensi
-
Konseptual