Mám tuto funkci na vyplnění comboboxu. Ta byla původně určená k tomu aby vyplnila combobox čísly které jsou uloženy jako stringy. Na čísla to funguje přidávání stringů i přiřazení hodnot. Když tam ale dám stringy které nenejsou čísla tak při jakékoliv vrácením hodnoty položky dostanu 0.
// extern const char *menu_pages[NUM_STARTUP_PAGES] = { "Messages", "Players", "Global Victory", "Disables", "Map", "Units", "Triggers" };
extern const char *menu_pages[NUM_STARTUP_PAGES] = { "0", "1", "2", "3", "4", "5", "Triggers" };
void Combo_Fill(HWND dialog, int id, char const * * strings, size_t count)
{
int index;
HWND control = GetDlgItem(dialog, id);
for (size_t i = 0; i < count; ++i){
index = Combo_AddStringA(control, *strings++);
SendMessageA(control, LB_SETITEMDATA, index,
(LPARAM)(strings));
}
}
Nemůžu přijít v čem je problém. Potřebuju tam asociovat tu hodnotu a zkoušel jsem jako čtvrtý argument dosadit (LPARAM)(i) ale to nezabralo.
Vytvořím listbox:
bool Init_Startup(HWND dialog)
{
Combo_Fill(dialog, IDC_O_STARTUP_PAGE, menu_pages, NUM_STARTUP_PAGES);
Combo_Fill(dialog, IDC_O_STARTUP_RECENT, menu_recents, NUM_STARTUP_RECENTS);
SendDlgItemMessage(dialog, IDC_O_STARTUP_PAGE, CB_SETCURSEL, setts.options.page-1, 0);
SendDlgItemMessage(dialog, IDC_O_STARTUP_RECENT, CB_SETCURSEL, setts.options.recent-1, 0);
return true;
}
A pak získávám hodnotu:
INT_PTR CALLBACK StartupDialogProc(HWND dialog, UINT msg, WPARAM wParam, LPARAM lParam)
{
switch (msg){
case WM_INITDIALOG:
return Init_Startup(dialog);
break;
case WM_DESTROY:
setts.options.page = GetDlgItemInt(dialog, IDC_O_STARTUP_PAGE, NULL, FALSE);
setts.options.recent = GetDlgItemInt(dialog, IDC_O_STARTUP_RECENT, NULL, FALSE);
break;
return 0;
}
funguje to jen na .recent (čísla uvnitř uvozovek) ne na .page (nenumerické stringy)
Poznámka:
SendMessageA tam původně nebyl to jsem tam dal já jak se to snažím vyřešit.