Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Dalam artikel ini, pelajari cara membuat dan menampilkan jendela.
Kelas jendela
Kelas jendela menentukan serangkaian perilaku yang mungkin memiliki kesamaan dengan beberapa jendela. Misalnya, dalam sekelompok tombol, setiap tombol memiliki perilaku yang sama ketika pengguna memilih tombol . Tentu saja, tombol tidak sepenuhnya identik. Setiap tombol menampilkan string teksnya sendiri dan memiliki koordinat layarnya sendiri. Data yang unik untuk setiap jendela disebut data instans.
Setiap jendela harus dikaitkan dengan kelas jendela, bahkan jika program Anda hanya pernah membuat satu instans kelas tersebut. Kelas jendela bukan kelas dalam arti C++. Sebaliknya, ini adalah struktur data yang digunakan secara internal oleh sistem operasi. Kelas jendela didaftarkan ke sistem pada waktu berjalan. Untuk mendaftarkan kelas jendela baru, isi struktur WNDCLASS:
// Register the window class.
const wchar_t CLASS_NAME[] = L"Sample Window Class";
WNDCLASS wc = { };
wc.lpfnWndProc = WindowProc;
wc.hInstance = hInstance;
wc.lpszClassName = CLASS_NAME;
Anda harus mengatur anggota struktur berikut:
- lpfnWndProc adalah penunjuk ke fungsi yang ditentukan aplikasi yang disebut prosedur jendela atau prosedur jendela . Prosedur jendela menentukan sebagian besar perilaku jendela. Untuk saat ini, nilai ini adalah deklarasi fungsi ke depan. Untuk informasi selengkapnya, lihat Menulis prosedur jendela.
-
hInstance adalah pengendali dari instans aplikasi. Dapatkan nilai ini dari parameter hInstance dari
wWinMain. - lpszClassName adalah string yang mengidentifikasi kelas jendela.
Nama kelas bersifat lokal untuk proses saat ini, sehingga nama hanya perlu unik dalam proses. Namun, kontrol Windows standar juga memiliki kelas. Jika Anda menggunakan salah satu kontrol tersebut, Anda harus memilih nama kelas yang tidak bertentangan dengan nama kelas kontrol. Misalnya, kelas jendela untuk kontrol tombol diberi nama Tombol.
Struktur WNDCLASS memiliki anggota lain yang tidak ditampilkan di sini. Anda dapat mengaturnya ke nol, seperti yang ditunjukkan dalam contoh ini, atau mengisinya. Untuk informasi selengkapnya, lihat WNDCLASS.
Selanjutnya, teruskan alamat struktur WNDCLASS ke fungsiRegisterClass. Fungsi ini mendaftarkan kelas jendela dengan sistem operasi.
RegisterClass(&wc);
Membuat jendela
Untuk membuat instans baru jendela, panggil fungsiCreateWindowEx:
HWND hwnd = CreateWindowEx(
0, // Optional window styles.
CLASS_NAME, // Window class
L"Learn to Program Windows", // Window text
WS_OVERLAPPEDWINDOW, // Window style
// Size and position
CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT,
NULL, // Parent window
NULL, // Menu
hInstance, // Instance handle
NULL // Additional application data
);
if (hwnd == NULL)
{
return 0;
}
Untuk deskripsi parameter terperinci, lihat CreateWindowEx. Berikut adalah ringkasan singkat:
- Parameter pertama memungkinkan Anda menentukan beberapa perilaku opsional untuk jendela, misalnya, jendela transparan. Atur parameter ini ke nol untuk perilaku default.
- Kelas jendela tersebut bernama
CLASS_NAME. Nama ini menentukan jenis jendela yang akan dibuat. - Teks jendela digunakan dengan cara yang berbeda oleh berbagai jenis jendela. Jika jendela memiliki bilah judul, teks ditampilkan di bilah judul.
- Gaya jendela adalah sekumpulan bendera yang menentukan beberapa tampilan dan nuansa jendela. Konstanta WS_OVERLAPPEDWINDOW sebenarnya adalah beberapa bendera yang dikombinasikan dengan bitwise
OR. Dengan bendera-bendera ini, jendela memiliki bilah judul, batas, menu sistem, dan tombol Minimalkan serta tombol Maksimalkan. Set bendera ini adalah gaya yang paling umum untuk jendela aplikasi tingkat atas. - Untuk posisi dan ukuran, konstanta CW_USEDEFAULT berarti untuk menggunakan nilai default.
- Parameter berikutnya mengatur jendela induk atau jendela pemilik untuk jendela baru. Atur induk jika ingin membuat jendela anak. Untuk jendela tingkat atas, atur nilai ini ke
NULL. - Untuk jendela aplikasi, parameter berikutnya menentukan menu untuk jendela. Contoh ini tidak menggunakan menu, sehingga nilainya
NULL. - hInstance adalah handle instance, seperti yang dijelaskan sebelumnya. Lihat WinMain: Titik Masuk Aplikasi.
- Parameter terakhir adalah penunjuk ke data semena-mena jenis
void*. Anda dapat menggunakan nilai ini untuk meneruskan struktur data ke prosedur jendela Anda. Untuk salah satu cara yang mungkin untuk menggunakan parameter ini, lihat Mengelola Status Aplikasi.
CreateWindowEx mengembalikan handle untuk jendela baru, atau nol jika fungsi gagal. Untuk menampilkan jendela, yaitu, buat jendela terlihat, teruskan gagang jendela ke fungsiShowWindow:
ShowWindow(hwnd, nCmdShow);
Parameter hwnd adalah handle jendela yang dikembalikan dari fungsi CreateWindowEx. Parameter nCmdShow dapat digunakan untuk meminimalkan atau memaksimalkan jendela. Sistem operasi meneruskan nilai ini ke program melalui fungsi wWinMain.
Berikut adalah kode lengkap untuk membuat jendela. Ingatlah bahwa WindowProc masih merupakan deklarasi awal dari sebuah fungsi.
// Register the window class.
const wchar_t CLASS_NAME[] = L"Sample Window Class";
WNDCLASS wc = { };
wc.lpfnWndProc = WindowProc;
wc.hInstance = hInstance;
wc.lpszClassName = CLASS_NAME;
RegisterClass(&wc);
// Create the window.
HWND hwnd = CreateWindowEx(
0, // Optional window styles.
CLASS_NAME, // Window class
L"Learn to Program Windows", // Window text
WS_OVERLAPPEDWINDOW, // Window style
// Size and position
CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT,
NULL, // Parent window
NULL, // Menu
hInstance, // Instance handle
NULL // Additional application data
);
if (hwnd == NULL)
{
return 0;
}
ShowWindow(hwnd, nCmdShow);
Selamat, Anda telah membuat jendela!
Saat ini, jendela tidak berisi konten apa pun atau berinteraksi dengan pengguna. Dalam aplikasi GUI nyata, jendela akan merespons peristiwa dari pengguna dan sistem operasi. Bagian berikutnya menjelaskan bagaimana pesan jendela menyediakan interaktivitas semacam ini.
Lihat juga
Lanjutkan ke Window Messages untuk melanjutkan modul ini.