Listbox, problém s přiřazením hodnoty – C / C++ – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu
Reklama
Reklama

Listbox, problém s přiřazením hodnoty – C / C++ – Fórum – Programujte.comListbox, problém s přiřazením hodnoty – C / C++ – Fórum – Programujte.com

 

Hledá se programátor! Plat 1 800 € + bonusy (firma Boxmol.com)
oxidián0
Věrný člen
7. 7. 2015   #1
-
0
-

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.

Nahlásit jako SPAM
IP: 78.45.87.–
Reklama
Reklama
Radek Chalupa
~ Redaktor
0
Super člen
7. 7. 2015   #2
-
0
-

#1 oxidián
Z toho uvedeného kódu je to trochu zmatené, ale GetDlgItemInt samozřejmě vrací pouze číslo a jako data položky comboboxu nebo listboxu můžeš nastavit také pouze číslo. které samozřejmé může představovat pointr ma nějaký string nebo jiná data, ale platnost těch adres si musiš zajistit sám v logice programu.

Radek Chalupa
- individuální konzultace, školení programování (C/C++, WinAPI, COM, ActiveX, ATL, C#, NET Framework, MFC)
- vývoj software na zakázku
http://www.radekchalupa.cz

Nahlásit jako SPAM
IP: 89.177.51.–
oxidián0
Věrný člen
7. 7. 2015   #3
-
0
-

No ale já tam původně nastavoval číslo i a to mi nefungovalo, tj. nevracelo mi to žádné číslo. setts.options.page je vždycky 0 ať dělám co dělám.

Takže když odladím každý cyklus zvlášť tak index se navyšuje, při indexu 6 je string "Triggers" a posílá se zpráva. Pak se otevře okno, uzavřu, jdu na WM_DESTROY kde se provádí

setts.options.page = GetDlgItemInt(dialog, IDC_O_STARTUP_PAGE, NULL, FALSE);

a page je 0 :-/ prostě nechápu proč

Nahlásit jako SPAM
IP: 78.45.87.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 83 hostů

Podobná vlákna

Listbox a zmena hodnoty radky — založil VaKvas

Problém s ListBox — založil palikem

Listbox HELP — založil Ghafan

Moderátoři diskuze

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032016 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý