Чтобы создать listbox нужно написать следующее:

Код:
hwndListBox = CreateWindowEx(WS_EX_CLIENTEDGE, "LISTBOX", "", WS_CHILD | WS_VISIBLE | WS_VSCROLL| LBS_NOTIFY, 10, 40, 400, 200, hwnd, (HMENU)CMD_LISTBOX1, NULL, NULL);

Чтобы получить количество записей в Listbox:

Код:
DWORD count = SendMessage(hwndListBox, LB_GETCOUNT, 0, 0);

Чтобы получить номер выделенного элемента:

Код:
DWORD selected_item;
selected_item = SendMessage(hwndListBox, LB_GETCURSEL, 0, 0);

Чтобы получить текст из выделенного элемента:

Код:
SendMessage(hwndListBox, LB_GETTEXT, (WPARAM)selected_item, (LPARAM)buf);

Чтобы добавить новый элемент:

Код:
SendMessage(hwndListBox, LB_ADDSTRING, 0, (LPARAM)buf);

Чтобы удалить выделенный элемент:

Код:
SendMessage(hwndListBox, LB_DELETESTRING, (WPARAM)selected_item, 0);

Чтобы очистить listbox:

Код:
SendMessage(hwndListBox, LB_RESETCONTENT, 0, 0);

Полный код:

Код:
#include <windows.h>
#define CMD_BUTTON1      100 // Кнопка Add
#define CMD_BUTTON2      101 // Кнопка Del
#define CMD_LISTBOX1	102 // Listbox
#define CMD_TEXTBOX1    103 // Текстовое поле

HWND hwndListBox, hwndButton1, hwndButton2, hwndTextBox;
char buf[512];
DWORD selected_item;

LRESULT CALLBACK WndProc(HWND hwnd, UINT Message, WPARAM wParam, LPARAM lParam) {
	switch(Message) {
    
    case WM_COMMAND:
    	switch(LOWORD(wParam)) {
        case CMD_TEXTBOX1:
        // Если нажали на текстовое поле
        break;
        case CMD_LISTBOX1:
          // Если нажали на listbox
          if(SendMessage(hwndListBox, LB_GETCOUNT, 0, 0) >= 0) {
                  // Если количество элементов больше 0, то получаем выбранный элемент
        	 selected_item = SendMessage(hwndListBox, LB_GETCURSEL, 0, 0);
                 // Получаем текст
        	 SendMessage(hwndListBox, LB_GETTEXT, (WPARAM)selected_item, (LPARAM)buf);
                 // Записываем текст в поле
        	 SetWindowText(hwndTextBox, buf);
          }
          else 
          	MessageBox(hwnd, "Please select item, to delete", "Warning", MB_OK | MB_ICONWARNING); // Иначе пишим, пожайлуста выберете элемент для удаления
        break;
        
        case CMD_BUTTON1:
          // Если нажали на кнопку Add, проверяем ввели ли в поле текст
          if(GetWindowTextLength(hwndTextBox) < 1) {
            // Иначе выдаём предупреждение
            MessageBox(hwnd, "Please type text", "Warning", MB_OK | MB_ICONWARNING);
            break;
          }
    	      else if(GetWindowTextLength(hwndTextBox) > 512)
    	        GetWindowText(hwndTextBox, buf, 512); // Если текст больше 512 символов, то выбераем 512
    	      else 
    	        GetWindowText(hwndTextBox, buf, GetWindowTextLength(hwndTextBox)+1); Иначе получаем размер поля, и считываетм текст
    	        
                 // Добавляем текст из текстового поле
    	         SendMessage(hwndListBox, LB_ADDSTRING, 0, (LPARAM)buf);  
                 // Очищаем текстовое поле
    	         SetWindowText(hwndTextBox, "");
        break;
        case CMD_BUTTON2:
          // Если выделен текст
          if(SendMessage(hwndListBox, LB_GETCOUNT, 0, 0) >= 0) {
                  // Получаем выбранный элемент
        	 selected_item = SendMessage(hwndListBox, LB_GETCURSEL, 0, 0);
                  // Удаляем выбранный элемент из listbox
        	 SendMessage(hwndListBox, LB_DELETESTRING, (WPARAM)selected_item, 0);
          }
        break;
    	}
    break;
    case WM_CREATE:
        // Добавляем текстовое поле
    	hwndTextBox = CreateWindowEx(WS_EX_CLIENTEDGE, "EDIT", "", WS_CHILD | WS_VISIBLE, 10, 10, 400, 20, hwnd, (HMENU)CMD_TEXTBOX1, NULL, NULL);
        // Добавляем кнопку Add
    	hwndButton1 = CreateWindow("BUTTON", "ADD", WS_CHILD | WS_VISIBLE, 410, 10, 100, 20,  hwnd, (HMENU)CMD_BUTTON1, NULL, NULL);
        // Добавляем кнопку Del
    	hwndButton2 = CreateWindow("BUTTON", "DEL", WS_CHILD | WS_VISIBLE, 520, 10, 100, 20,  hwnd, (HMENU)CMD_BUTTON2, NULL, NULL);
        // Добавляем listbox
    	hwndListBox = CreateWindowEx(WS_EX_CLIENTEDGE, "LISTBOX", "", WS_CHILD | WS_VISIBLE | WS_VSCROLL| LBS_NOTIFY, 10, 40, 400, 200, hwnd, (HMENU)CMD_LISTBOX1, NULL, NULL);    	
        // Очищаем listbox
    	SendMessage(hwndListBox, LB_RESETCONTENT, 0, 0);
    	break;
    case WM_DESTROY: {
    	PostQuitMessage(0);
    	break;
    }
    
    default:
    	return DefWindowProc(hwnd, Message, wParam, lParam);
	}
	return 0;
}

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) {
	WNDCLASSEX wc;
	HWND hwnd;
	MSG msg;

	memset(&wc,0,sizeof(wc));
	wc.cbSize     = sizeof(WNDCLASSEX);
	wc.lpfnWndProc	 = WndProc;
	wc.hInstance	 = hInstance;
	wc.hCursor     = LoadCursor(NULL, IDC_ARROW);
	
	wc.hbrBackground = (HBRUSH)(COLOR_WINDOW+1);
	wc.lpszClassName = "WindowClass";
	wc.hIcon     = LoadIcon(NULL, IDI_APPLICATION); 
	wc.hIconSm     = LoadIcon(NULL, IDI_APPLICATION); 

	if(!RegisterClassEx(&wc)) {
    MessageBox(NULL, "Window Registration Failed!","Error!",MB_ICONEXCLAMATION|MB_OK);
    return 0;
	}

	hwnd = CreateWindowEx(WS_EX_CLIENTEDGE,"WindowClass","ListBox Demo",WS_VISIBLE|WS_OVERLAPPEDWINDOW,
    CW_USEDEFAULT,
    CW_USEDEFAULT,
    800, 
    600,
    NULL,NULL,hInstance,NULL);

	if(hwnd == NULL) {
    MessageBox(NULL, "Window Creation Failed!","Error!",MB_ICONEXCLAMATION|MB_OK);
    return 0;
	}

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

А вот результат:
https://i.ibb.co/qWTd0bC/result-dev-cpp-listbox-00-01-26-05-21-min.jpg