Untuk menambahkan listbox, nama class Window yang kita gunakan dalam CreateWindow atau CreateWindowEx adalah "LISTBOX". Untuk menambahkan isi listbox, kita bisa menggunakan SendMessage dengan LB_ADDSTRING sebagai argumen dari parameter keduanya. Untuk menghapus isi listbox pada posisi tertentu, gunakan SendMessage dengan LB_DELETESTRING. Contoh SendMessage lainnya untuk listbox bisa dilihat dibawah ini.
#include <windows.h>
#include <string.h>
#define nkolom 4
#define nbaris 5
#define tombol_AC 200
#define tombol_BS 202
HWND lstbox;
char stombol[24][5]={"AC", "C", "<=", "+", "1", "2", "3", "-", "4", "5", "6", "x", "7", "8", "9", "/", "+/-", ",", "0", "="};
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, 198, 290, 0, 0, hinst, 0);
lstbox=CreateWindowEx(0, TEXT("LISTBOX"), "", WS_VISIBLE | WS_CHILD | WS_BORDER , 4, 4, 170, 180, wind, 0, hinst, 0);
//Buat textbox, static text dan tombol
for(int i=0;i<10;i++){
SendMessage(lstbox, LB_ADDSTRING, 0, (LPARAM)stombol[i]);
}
SendMessage(lstbox, LB_SETCURSEL, 0, 0);
CreateWindowEx(0, TEXT("BUTTON"), "HAPUS", WS_VISIBLE | WS_CHILD | WS_BORDER , 4, 190, 170, 20, wind, (HMENU)100, 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:
if(LOWORD(wParam)==100){
if(SendMessage(lstbox, LB_GETCOUNT, 0, 0)>3){
SendMessage(lstbox, LB_DELETESTRING, 1, 0);
SendMessage(lstbox, LB_SETCURSEL, 1, 0);
}
}
break;
case WM_CLOSE:
PostQuitMessage(0);
break;
}
return DefWindowProc(hwnd, pesan, wParam, lParam);
};
Windows message yang digunakan untuk listbox dalam SendMessage umumnya diawali dengan LB. Beberapa "window message" khusus yang bisa digunakan untuk listbox, yaitu :
#include <windows.h>
#include <string.h>
#define nkolom 4
#define nbaris 5
#define tombol_AC 200
#define tombol_BS 202
HWND lstbox;
char stombol[24][5]={"AC", "C", "<=", "+", "1", "2", "3", "-", "4", "5", "6", "x", "7", "8", "9", "/", "+/-", ",", "0", "="};
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, 198, 290, 0, 0, hinst, 0);
lstbox=CreateWindowEx(0, TEXT("LISTBOX"), "", WS_VISIBLE | WS_CHILD | WS_BORDER , 4, 4, 170, 180, wind, 0, hinst, 0);
//Buat textbox, static text dan tombol
for(int i=0;i<10;i++){
SendMessage(lstbox, LB_ADDSTRING, 0, (LPARAM)stombol[i]);
}
SendMessage(lstbox, LB_SETCURSEL, 0, 0);
CreateWindowEx(0, TEXT("BUTTON"), "HAPUS", WS_VISIBLE | WS_CHILD | WS_BORDER , 4, 190, 170, 20, wind, (HMENU)100, 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:
if(LOWORD(wParam)==100){
if(SendMessage(lstbox, LB_GETCOUNT, 0, 0)>3){
SendMessage(lstbox, LB_DELETESTRING, 1, 0);
SendMessage(lstbox, LB_SETCURSEL, 1, 0);
}
}
break;
case WM_CLOSE:
PostQuitMessage(0);
break;
}
return DefWindowProc(hwnd, pesan, wParam, lParam);
};
Windows message yang digunakan untuk listbox dalam SendMessage umumnya diawali dengan LB. Beberapa "window message" khusus yang bisa digunakan untuk listbox, yaitu :
- LB_GETCOUNT : Mendapatkan jumlah isi dari listbox
- LB_GETCURSEL : Mendapatkan posisi yang dipilih dalam listbox
- LB_ADDSTRING : Menambah isi ListBox
- LB_DELETESTRING : Menghapus isi ListBox di posisi tertentu
- LB_RESETCONTENT : Menghapus semua isi ListBox
- LB_SETCURSEL : menentukan posisi pilihan dalam listbox
- LB_GETTEXT : Mendapatkan isi listbox di posisi tertentu