Tentang Windows
Topik ini menjelaskan elemen pemrograman yang digunakan aplikasi untuk membuat dan menggunakan jendela; mengelola hubungan antar jendela; dan ukuran, pindahkan, dan tampilkan jendela.
Gambaran umum mencakup topik berikut.
Jendela Desktop
Saat Anda memulai sistem, sistem secara otomatis membuat jendela desktop. Jendela desktop adalah jendela yang ditentukan sistem yang melukis latar belakang layar dan berfungsi sebagai dasar untuk semua jendela yang ditampilkan oleh semua aplikasi.
Jendela desktop menggunakan bitmap untuk melukis latar belakang layar. Pola yang dibuat oleh bitmap disebut wallpaper desktop. Secara default, jendela desktop menggunakan bitmap dari file .bmp yang ditentukan dalam registri sebagai wallpaper desktop.
Fungsi GetDesktopWindow mengembalikan handel ke jendela desktop.
Aplikasi konfigurasi sistem, seperti item Panel Kontrol, mengubah wallpaper desktop dengan menggunakan fungsi SystemParametersInfo dengan parameter wAction diatur ke SPI_SETDESKWALLPAPER dan parameter lpvParam yang menentukan nama file bitmap. SystemParametersInfo kemudian memuat bitmap dari file yang ditentukan, menggunakan bitmap untuk melukis latar belakang layar, dan memasukkan nama file baru di registri.
Windows Aplikasi
Setiap aplikasi berbasis Windows grafis membuat setidaknya satu jendela, yang disebut jendela utama, yang berfungsi sebagai antarmuka utama antara pengguna dan aplikasi. Sebagian besar aplikasi juga membuat jendela lain, baik secara langsung maupun tidak langsung, untuk melakukan tugas yang terkait dengan jendela utama. Setiap jendela memainkan peran dalam menampilkan output dan menerima input dari pengguna.
Saat Anda memulai aplikasi, sistem juga mengaitkan tombol taskbar dengan aplikasi. Tombol bilah tugas berisi ikon program dan judul. Ketika aplikasi aktif, tombol taskbar-nya ditampilkan dalam status didorong.
Jendela aplikasi mencakup elemen seperti bilah judul, bilah menu, menu jendela (sebelumnya dikenal sebagai menu sistem), tombol minimalkan, tombol maksimalkan, tombol pulihkan, tombol tutup, batas ukuran, area klien, bilah gulir horizontal, dan bilah gulir vertikal. Jendela utama aplikasi biasanya mencakup semua komponen ini. Ilustrasi berikut menunjukkan komponen-komponen ini di jendela utama yang khas.
Area Klien
Area klien adalah bagian dari jendela tempat aplikasi menampilkan output, seperti teks atau grafik. Misalnya, aplikasi penerbitan desktop menampilkan halaman dokumen saat ini di area klien. Aplikasi harus menyediakan fungsi, yang disebut prosedur jendela, untuk memproses input ke jendela dan menampilkan output di area klien. Untuk informasi selengkapnya, lihat Prosedur Jendela.
Area Nonkelas
Bilah judul, bilah menu, menu jendela, meminimalkan dan memaksimalkan tombol, batas ukuran, dan bilah gulir disebut secara kolektif sebagai area nonkelola jendela. Sistem ini mengelola sebagian besar aspek area nonkelola; aplikasi mengelola tampilan dan perilaku area kliennya.
Bilah judul menampilkan ikon dan baris teks yang ditentukan aplikasi; biasanya, teks menentukan nama aplikasi atau menunjukkan tujuan jendela. Aplikasi menentukan ikon dan teks saat membuat jendela. Bilah judul juga memungkinkan pengguna untuk memindahkan jendela dengan menggunakan mouse atau perangkat penunjuk lainnya.
Sebagian besar aplikasi menyertakan bilah menu yang mencantumkan perintah yang didukung oleh aplikasi. Item di bilah menu mewakili kategori utama perintah. Mengklik item pada bilah menu biasanya membuka menu pop-up yang itemnya sesuai dengan tugas dalam kategori tertentu. Dengan mengklik perintah, pengguna mengarahkan aplikasi untuk melakukan tugas.
Menu jendela dibuat dan dikelola oleh sistem. Ini berisi sekumpulan item menu standar yang, ketika dipilih oleh pengguna, mengatur ukuran atau posisi jendela, menutup aplikasi, atau melakukan tugas. Untuk informasi selengkapnya, lihat Menu.
Tombol di sudut kanan atas memengaruhi ukuran dan posisi jendela. Saat Anda mengklik tombol maksimalkan, sistem memperbesar jendela ke ukuran layar dan memposisikan jendela, sehingga mencakup seluruh desktop, dikurangi taskbar. Pada saat yang sama, sistem mengganti tombol maksimalkan dengan tombol pulihkan. Ketika Anda mengklik tombol pulihkan, sistem memulihkan jendela ke ukuran dan posisi sebelumnya. Ketika Anda mengklik tombol minimalkan, sistem mengurangi jendela ke ukuran tombol taskbar-nya, memosisikan jendela di atas tombol taskbar, dan menampilkan tombol taskbar dalam keadaan normal. Untuk memulihkan aplikasi ke ukuran dan posisi sebelumnya, klik tombol taskbar-nya. Saat Anda mengklik tombol tutup, aplikasi akan keluar.
Batas ukuran adalah area di sekitar perimeter jendela yang memungkinkan pengguna untuk mengukur jendela dengan menggunakan mouse atau perangkat penunjuk lainnya.
Bilah gulir horizontal dan bilah gulir vertikal mengonversi input mouse atau keyboard menjadi nilai yang digunakan aplikasi untuk menggeser isi area klien baik secara horizontal maupun vertikal. Misalnya, aplikasi pemrosesan kata yang menampilkan dokumen panjang biasanya menyediakan bilah gulir vertikal untuk memungkinkan pengguna membuat halaman ke atas dan ke bawah melalui dokumen.
Kontrol dan Kotak Dialog
Aplikasi dapat membuat beberapa jenis jendela selain jendela utamanya, termasuk kontrol dan kotak dialog.
Kontrol adalah jendela yang digunakan aplikasi untuk mendapatkan informasi tertentu dari pengguna, seperti nama file untuk dibuka atau ukuran titik yang diinginkan dari pilihan teks. Aplikasi juga menggunakan kontrol untuk mendapatkan informasi yang diperlukan untuk mengontrol fitur tertentu dari aplikasi. Misalnya, aplikasi pemrosesan kata biasanya menyediakan kontrol untuk memungkinkan pengguna mengaktifkan dan menonaktifkan pembungkusan kata. Untuk informasi selengkapnya, lihat Kontrol Windows.
Kontrol selalu digunakan bersama dengan jendela lain—biasanya, kotak dialog. Kotak dialog adalah jendela yang berisi satu atau beberapa kontrol. Aplikasi menggunakan kotak dialog untuk meminta input yang diperlukan pengguna untuk menyelesaikan perintah. Misalnya, aplikasi yang menyertakan perintah untuk membuka file akan menampilkan kotak dialog yang menyertakan kontrol di mana pengguna menentukan jalur dan nama file. Kotak dialog biasanya tidak menggunakan sekumpulan komponen jendela yang sama seperti halnya jendela utama. Sebagian besar memiliki bilah judul, menu jendela, batas (non-ukuran), dan area klien, tetapi biasanya tidak memiliki bilah menu, meminimalkan dan memaksimalkan tombol, atau bilah gulir. Untuk informasi selengkapnya, lihat Kotak Dialog.
Kotak pesan adalah kotak dialog khusus yang menampilkan catatan, peringatan, atau peringatan kepada pengguna. Misalnya, kotak pesan dapat memberi tahu pengguna tentang masalah yang dihadapi aplikasi saat melakukan tugas. Untuk informasi selengkapnya, lihat Kotak Pesan.
Atribut Jendela
Aplikasi harus memberikan informasi berikut saat membuat jendela. (Dengan pengecualian Handel Jendela, yang dikembalikan fungsi pembuatan untuk mengidentifikasi jendela baru secara unik.)
- Nama Kelas
- Nama Jendela
- Gaya Jendela
- Gaya Jendela yang Diperluas
- Position
- Ukuran
- Handel Jendela Induk atau Pemilik
- Handel Menu atau Pengidentifikasi Child-Window
- Handel Instans Aplikasi
- Data Pembuatan
- Handel Jendela
Atribut jendela ini dijelaskan di bagian berikut.
Nama Kelas
Setiap jendela milik kelas jendela. Aplikasi harus mendaftarkan kelas jendela sebelum membuat jendela kelas tersebut. Kelas jendela mendefinisikan sebagian besar aspek tampilan dan perilaku jendela. Komponen utama kelas jendela adalah prosedur jendela, fungsi yang menerima dan memproses semua input dan permintaan yang dikirim ke jendela. Sistem menyediakan input dan permintaan dalam bentuk pesan. Untuk informasi selengkapnya, lihat Kelas Jendela, Prosedur Jendela, dan Pesan dan Antrean Pesan.
Nama Jendela
Nama jendela adalah string teks yang mengidentifikasi jendela untuk pengguna. Jendela utama, kotak dialog, atau kotak pesan biasanya menampilkan nama jendelanya di bilah judulnya, jika ada. Kontrol dapat menampilkan nama jendelanya, tergantung pada kelas kontrol. Misalnya, tombol, kontrol edit, dan kontrol statis menampilkan nama jendelanya dalam persegi yang ditempati oleh kontrol. Namun, kontrol seperti kotak daftar dan kotak kombo tidak menampilkan nama jendelanya.
Untuk mengubah nama jendela setelah membuat jendela, gunakan fungsi SetWindowText . Fungsi ini menggunakan fungsi GetWindowTextLength dan GetWindowText untuk mengambil string nama jendela saat ini dari jendela.
Gaya Jendela
Setiap jendela memiliki satu atau beberapa gaya jendela. Gaya jendela adalah konstanta bernama yang menentukan aspek tampilan dan perilaku jendela yang tidak ditentukan oleh kelas jendela. Aplikasi biasanya mengatur gaya jendela saat membuat jendela. Ini juga dapat mengatur gaya setelah membuat jendela dengan menggunakan fungsi SetWindowLong .
Sistem dan, sampai batas tertentu, prosedur jendela untuk kelas, menginterpretasikan gaya jendela.
Beberapa gaya jendela berlaku untuk semua jendela, tetapi sebagian besar berlaku untuk jendela kelas jendela tertentu. Gaya jendela umum diwakili oleh konstanta yang dimulai dengan awalan WS_; mereka dapat dikombinasikan dengan operator OR untuk membentuk berbagai jenis jendela, termasuk jendela utama, kotak dialog, dan jendela anak. Gaya jendela khusus kelas menentukan tampilan dan perilaku jendela milik kelas kontrol yang telah ditentukan sebelumnya. Misalnya, kelas SCROLLBAR menentukan kontrol bilah gulir, tetapi gaya SBS_HORZ dan SBS_VERT menentukan apakah kontrol bilah gulir horizontal atau vertikal dibuat.
Untuk daftar gaya yang bisa digunakan oleh jendela, lihat topik berikut:
- Gaya Jendela
- Gaya Tombol
- Gaya Kotak Kombo
- Edit Gaya Kontrol
- Gaya Kotak Daftar
- Gaya Kontrol Edit Kaya
- Gaya Kontrol Bilah Gulir
- Gaya Kontrol Statis
Gaya Jendela yang Diperluas
Setiap jendela dapat secara opsional memiliki satu atau beberapa gaya jendela yang diperluas. Gaya jendela yang diperluas adalah konstanta bernama yang menentukan aspek tampilan dan perilaku jendela yang tidak ditentukan oleh kelas jendela atau gaya jendela lainnya. Aplikasi biasanya mengatur gaya jendela yang diperluas saat membuat jendela. Ini juga dapat mengatur gaya setelah membuat jendela dengan menggunakan fungsi SetWindowLong .
Untuk informasi selengkapnya, lihat CreateWindowEx.
Position
Posisi jendela didefinisikan sebagai koordinat sudut kiri atasnya. Koordinat ini, kadang-kadang disebut koordinat jendela, selalu relatif terhadap sudut kiri atas layar atau, untuk jendela anak, sudut kiri atas area klien jendela induk. Misalnya, jendela tingkat atas yang memiliki koordinat (10.10) ditempatkan 10 piksel di sebelah kanan sudut kiri atas layar dan 10 piksel ke bawah darinya. Jendela anak yang memiliki koordinat (10.10) ditempatkan 10 piksel di sebelah kanan sudut kiri atas area klien jendela induknya dan 10 piksel ke bawah darinya.
Fungsi WindowFromPoint mengambil handel ke jendela yang menempati titik tertentu di layar. Demikian pula, fungsi ChildWindowFromPoint dan ChildWindowFromPointEx mengambil handel ke jendela anak yang menempati titik tertentu di area klien jendela induk. Meskipun ChildWindowFromPointEx dapat mengabaikan jendela anak yang tidak terlihat, dinonaktifkan, dan transparan, ChildWindowFromPoint tidak dapat.
Ukuran
Ukuran jendela (lebar dan tinggi) diberikan dalam piksel. Jendela dapat memiliki lebar atau tinggi nol. Jika aplikasi mengatur lebar dan tinggi jendela ke nol, sistem mengatur ukuran ke ukuran jendela minimum default. Untuk menemukan ukuran jendela minimum default, aplikasi menggunakan fungsi GetSystemMetrics dengan bendera SM_CXMIN dan SM_CYMIN .
Aplikasi mungkin perlu membuat jendela dengan area klien dengan ukuran tertentu. Fungsi AdjustWindowRect dan AdjustWindowRectEx menghitung ukuran jendela yang diperlukan berdasarkan ukuran area klien yang diinginkan. Aplikasi dapat meneruskan nilai ukuran yang dihasilkan ke fungsi CreateWindowEx .
Aplikasi dapat mengukur jendela sehingga sangat besar; namun, seharusnya tidak mengukur jendela sehingga lebih besar dari layar. Sebelum mengatur ukuran jendela, aplikasi harus memeriksa lebar dan tinggi layar dengan menggunakan GetSystemMetrics dengan bendera SM_CXSCREEN dan SM_CYSCREEN .
Handel Jendela Induk atau Pemilik
Jendela dapat memiliki jendela induk. Jendela yang memiliki induk disebut jendela anak. Jendela induk menyediakan sistem koordinat yang digunakan untuk memposisikan jendela anak. Memiliki jendela induk mempengaruhi aspek penampilan jendela; misalnya, jendela anak diklip sehingga tidak ada bagian jendela anak yang dapat muncul di luar batas jendela induknya.
Jendela yang tidak memiliki induk, atau yang induknya adalah jendela desktop, disebut jendela tingkat atas. Aplikasi dapat menggunakan fungsi EnumWindows untuk mendapatkan handel ke setiap jendela tingkat atas di layar. EnumWindows meneruskan handel ke setiap jendela tingkat atas, pada gilirannya, ke fungsi panggilan balik yang ditentukan aplikasi, EnumWindowsProc.
Jendela tingkat atas dapat memiliki, atau dimiliki oleh, jendela lain. Jendela yang dimiliki selalu muncul di depan jendela pemiliknya, disembunyikan ketika jendela pemiliknya diminimalkan, dan dihancurkan ketika jendela pemiliknya dihancurkan. Untuk informasi selengkapnya, lihat Windows yang Dimiliki.
Handel Menu atau Pengidentifikasi Child-Window
Jendela anak dapat memiliki pengidentifikasi jendela anak , nilai unik yang ditentukan aplikasi yang terkait dengan jendela anak. Pengidentifikasi jendela anak sangat berguna dalam aplikasi yang membuat beberapa jendela anak. Saat membuat jendela anak, aplikasi menentukan pengidentifikasi jendela anak. Setelah membuat jendela, aplikasi dapat mengubah pengidentifikasi jendela dengan menggunakan fungsi SetWindowLong , atau dapat mengambil pengidentifikasi dengan menggunakan fungsi GetWindowLong .
Setiap jendela, kecuali jendela anak, dapat memiliki menu. Aplikasi dapat menyertakan menu dengan menyediakan handel menu baik saat mendaftarkan kelas jendela atau saat membuat jendela.
Handel Instans Aplikasi
Setiap aplikasi memiliki handel instans yang terkait dengannya. Sistem menyediakan handel instans ke aplikasi saat aplikasi dimulai. Karena dapat menjalankan beberapa salinan aplikasi yang sama, sistem menggunakan instans menangani secara internal untuk membedakan satu instans aplikasi dari yang lain. Aplikasi harus menentukan handel instans di banyak jendela yang berbeda, termasuk yang membuat jendela.
Data Pembuatan
Setiap jendela dapat memiliki data pembuatan yang ditentukan aplikasi yang terkait dengannya. Ketika jendela pertama kali dibuat, sistem meneruskan penunjuk ke data ke prosedur jendela jendela yang sedang dibuat. Prosedur jendela menggunakan data untuk menginisialisasi variabel yang ditentukan aplikasi.
Handel Jendela
Setelah membuat jendela, fungsi pembuatan mengembalikan handel jendela yang secara unik mengidentifikasi jendela. Handel jendela memiliki jenis data HWND ; aplikasi harus menggunakan jenis ini saat mendeklarasikan variabel yang memegang handel jendela. Aplikasi menggunakan handel ini di fungsi lain untuk mengarahkan tindakan mereka ke jendela.
Aplikasi dapat menggunakan fungsi FindWindow untuk menemukan apakah jendela dengan nama kelas atau nama jendela yang ditentukan ada dalam sistem. Jika jendela seperti itu ada, FindWindow mengembalikan handel ke jendela. Untuk membatasi pencarian ke jendela anak dari aplikasi tertentu, gunakan fungsi FindWindowEx .
Fungsi IsWindow menentukan apakah handel jendela mengidentifikasi jendela yang valid dan sudah ada. Ada konstanta khusus yang dapat menggantikan handel jendela dalam fungsi tertentu. Misalnya, aplikasi dapat menggunakan HWND_BROADCAST dalam fungsi SendMessage dan SendMessageTimeout , atau HWND_DESKTOP dalam fungsi MapWindowPoints .
Pembuatan Jendela
Untuk membuat jendela aplikasi, gunakan fungsi CreateWindow atau CreateWindowEx . Anda harus memberikan informasi yang diperlukan untuk menentukan atribut jendela. CreateWindowEx memiliki parameter, dwExStyle, yang tidak dimiliki CreateWindow ; jika tidak, fungsinya identik. Bahkan, CreateWindow hanya memanggil CreateWindowEx dengan parameter dwExStyle yang diatur ke nol. Untuk alasan ini, sisa gambaran umum ini hanya mengacu pada CreateWindowEx.
Bagian ini berisi topik berikut:
Catatan
Ada fungsi tambahan untuk membuat jendela tujuan khusus seperti kotak dialog dan kotak pesan. Untuk informasi selengkapnya, lihat Kotak Dialog, BuatDialog, dan Kotak Pesan.
Pembuatan Jendela Utama
Setiap aplikasi berbasis Windows harus memiliki WinMain sebagai fungsi titik masuknya. WinMain melakukan sejumlah tugas, termasuk mendaftarkan kelas jendela untuk jendela utama dan membuat jendela utama. WinMain mendaftarkan kelas jendela utama dengan memanggil fungsi RegisterClass , dan membuat jendela utama dengan memanggil fungsi CreateWindowEx .
Fungsi WinMain Anda juga dapat membatasi aplikasi Anda ke satu instans. Buat mutex bernama menggunakan fungsi CreateMutex . Jika GetLastError mengembalikan ERROR_ALREADY_EXISTS, instans lain dari aplikasi Anda ada (itu membuat mutex) dan Anda harus keluar dari WinMain.
Sistem tidak secara otomatis menampilkan jendela utama setelah membuatnya; sebagai gantinya, aplikasi harus menggunakan fungsi ShowWindow untuk menampilkan jendela utama. Setelah membuat jendela utama, fungsi WinMain aplikasi memanggil ShowWindow, meneruskannya dua parameter: handel ke jendela utama dan bendera yang menentukan apakah jendela utama harus diminimalkan atau dimaksimalkan saat pertama kali ditampilkan. Biasanya, bendera dapat diatur ke salah satu konstanta yang dimulai dengan awalan SW_. Namun, ketika ShowWindow dipanggil untuk menampilkan jendela utama aplikasi, bendera harus diatur ke SW_SHOWDEFAULT. Bendera ini memberi tahu sistem untuk menampilkan jendela seperti yang diarahkan oleh program yang memulai aplikasi.
Jika kelas jendela terdaftar di RegisterClass versi Unicode, jendela hanya menerima pesan Unicode. Untuk menentukan apakah jendela menggunakan set karakter Unicode atau tidak, panggil IsWindowUnicode.
Pesan Window-Creation
Saat membuat jendela apa pun, sistem mengirim pesan ke prosedur jendela untuk jendela. Sistem mengirim pesan WM_NCCREATE setelah membuat area nonkelola jendela dan pesan WM_CREATE setelah membuat area klien. Prosedur jendela menerima kedua pesan sebelum sistem menampilkan jendela. Kedua pesan menyertakan penunjuk ke struktur CREATESTRUCT yang berisi semua informasi yang ditentukan dalam fungsi CreateWindowEx . Biasanya, prosedur jendela melakukan tugas inisialisasi saat menerima pesan ini.
Saat membuat jendela anak, sistem mengirim pesan WM_PARENTNOTIFY ke jendela induk setelah mengirim pesan WM_NCCREATE dan WM_CREATE . Ini juga mengirim pesan lain saat membuat jendela. Jumlah dan urutan pesan ini bergantung pada kelas jendela dan gaya dan pada fungsi yang digunakan untuk membuat jendela. Pesan-pesan ini dijelaskan dalam topik lain dalam file bantuan ini.
Aplikasi Multithread
Aplikasi berbasis Windows dapat memiliki beberapa utas eksekusi, dan setiap utas dapat membuat jendela. Utas yang membuat jendela harus berisi kode untuk prosedur jendelanya.
Aplikasi dapat menggunakan fungsi EnumThreadWindows untuk menghitung jendela yang dibuat oleh utas tertentu. Fungsi ini meneruskan handel ke setiap jendela utas, pada gilirannya, ke fungsi panggilan balik yang ditentukan aplikasi, EnumThreadWndProc.
Fungsi GetWindowThreadProcessId mengembalikan pengidentifikasi utas yang membuat jendela tertentu.
Untuk mengatur status peragaan jendela yang dibuat oleh utas lain, gunakan fungsi ShowWindowAsync .