Menambahkan Tulisan dan Tombol dalam window

Kali ini kita akan belajar untuk menambahkan tombol dan tulisan dalam kode program yang menggunakan "windows.h". Kalau belum tahu cara membuat project baru, baca tulisan saya yang sebelumnya.

Semua bagian dari window seperti tombol adalah window juga. Tombol, textbox, dan bagian lain yang menjadi bagian dalam window memiliki nama class khusus yang sebaiknya tidak dijadikan nama class dari window utama, Misalnya "EDIT" yang digunakan untuk membuat textbox. Jangan lupa untuk menggunakan WS_CHILD untuk menempatkannya dalam window utama. Tanpa WS_CHILD, tombol akan muncul dalam window yang terpisah.

Untuk menambahkan textbox, gunakan CreateWindow atau CreateWindowsEx dengan class "EDIT".

CreateWindow(TEXT("EDIT"), "EDIT", WS_CHILD | WS_VISIBLE |WS_BORDER, 4, 4, 200, 20, wind, 0, hinst, 0);

Untuk menambahkan label atau sebut saja "tulisan", gunakan createWindow atau createWindowsEx dengan class "Static".

CreateWindow(TEXT("Static"), "Tulisan", WS_CHILD | WS_VISIBLE |WS_BORDER, 4, 4, 200, 20, wind, 0, hinst, 0);

Untuk menambahkan button / tombol, gunakan createWindow atau createWindowsEx dengan class "Button".

CreateWindow(TEXT("BUTTON"), "Tekan", WS_CHILD | WS_VISIBLE | WS_BORDER, 4, 28, 200, 20, wind, (HMENU)200, hinst, 0);

Tombol perlu semacam identitas untuk kita gunakan dalam WM_COMMAND. pada contoh di atas kita menggunakan "200" sebagai identitas dari tombol yang kita buat. Kita perlu menggunakan type casting (HMENU) untuk menyesuaikan nilai yang berupa bilangan dengan tipe data dari parameternya yang berupa HMENU. Dalam WM_COMMAND, kita perlu mengambil "sebagian nilai" dari lParam dengan menggunakan LOWORD untuk mengetahui mana tombol yang ditekan dari tombol-tombol yang ada.

Sekarang, kita lihat kode program lengkapnya.

#include <windows.h>

LRESULT CALLBACK wndproc(
  HWND hwnd,
  UINT pesan,
  WPARAM wParam,
  LPARAM lParam
);

int __stdcall WinMain(HINSTANCE hinst, HINSTANCE hprev, char *cmdl, int cmds){
HWND wind;
MSG msg;
WNDCLASS wcls={0};
wcls.hInstance=hinst;
wcls.hbrBackground=GetSysColorBrush(COLOR_3DFACE);
wcls.lpszClassName=TEXT("windowku");
wcls.lpfnWndProc=wndproc;
wcls.hCursor=LoadCursor(0,IDC_ARROW);
RegisterClass(&wcls);

    wind=CreateWindowEx(0, TEXT("windowku"), "Programku", WS_VISIBLE|WS_OVERLAPPEDWINDOW, 400, 200, 400, 400, 0, 0, hinst, 0);
    //Buat textbox, static text dan tombol  CreateWindow(TEXT("EDIT"), "EDIT", WS_CHILD | WS_VISIBLE |WS_BORDER, 4, 4, 200, 20, wind, 0, hinst, 0);
CreateWindow(TEXT("BUTTON"), "Tekan", WS_CHILD | WS_VISIBLE |WS_BORDER, 4, 28, 200, 20, wind, (HMENU)200, hinst, 0);
    CreateWindow(TEXT("STATIC"), "Tulisan", WS_CHILD | WS_VISIBLE |WS_BORDER, 4, 52, 200, 20, wind, 0, hinst, 0);

while(GetMessage(&msg, NULL, 0, 0)){
DispatchMessage(&msg);
TranslateMessage(&msg);
}
return msg.wParam;
}

LRESULT CALLBACK wndproc(HWND hwnd, UINT pesan, WPARAM wParam, LPARAM lParam){
switch(pesan){
case WM_COMMAND:
switch(LOWORD(wParam)){
case 200:
MessageBox(hwnd, "Halo Dunia", "Halo", 0);
break;
}
break;
case WM_CLOSE:
PostQuitMessage(0);
break;
}
return DefWindowProc(hwnd, pesan, wParam, lParam);
};

Build dan run project tersebut, lalu klik tombolnya. Btw, buang saja WS_BORDER-nya kalau tidak ingin ada kotak atau tepian yang mengelilingi textbox atau labelnya.


Berikut ini adalah nama beberapa class yang bisa kita gunakan dalam CreateWindow dan CreateWindowEx.

  1. BUTTON
  2. EDIT
  3. STATIC
  4. LISTBOX
  5. COMBOBOX
Ada beberapa class lain yang bisa kalian cari tahu sediri lewat mbah google. Sementara ini coba gunakan saja yang sudah saya sebutkan. :D