Wypełnianie ComboBox'a komunikatem SendMessage

0

Mam w pliku zasobów zrobionego m.in ComboBox'a - pustego.
I nie mogę dojść jak go wypełnić za pomocą API , czyli komunikatów SendMessage

Robiłem to mniej więcej tak:

// podpatrzone w msdn
HWND hwndCombo = GetDlgItem(hSMSBox, IDC_SIEC);
char* txt[] = {"Text1", "Text2", "Text3"};

int i = 0, index = 0;
for(i = 0; i < 4; i++)
{
SendMessage(hwndCombo, CB_ADDSTRING, 0, (LPARAM)(LPCSTR)txt[index++]);
}

Pomoże ktoś ??
Z Góry Wielkie Dzięki.
Pozdrawiam.

0

A dodałeś styl CBS_DROPDOWN? Podany przez Ciebie kod działa prawidłowo (tylko powinno być i < 3 w warunku pętli).

0

No teraz mam tak:
[code]
COMBOBOX IDC_SIEC,65,12,141,153,CBS_DROPDOWNLIST
[/code]

A przedtem miałem też CBS_DROPDOWN i tez nie działało.

Dlaczego u mnie nie działa ? ;/
Fak

A pętla no tak, wiem.

0
maxi napisał(a)

No teraz mam tak:
[code]
COMBOBOX IDC_SIEC,65,12,141,153,CBS_DROPDOWNLIST
[/code]

A przedtem miałem też CBS_DROPDOWN i tez nie działało.

Dlaczego u mnie nie działa ? ;/
Fak

A pętla no tak, wiem.

CBS_DROPDOWN nie ma zwiazku.
Dodaj styl CBS_HASSTRINGS i bedzie ok.

Btw. Dlaczego tworzysz dwie zmienne (i i index) ktore maja ta sama wartosc?

0

Dodaj styl CBS_HASSTRINGS i bedzie ok.

To też już miałem, i nie pomogło.

Btw. Dlaczego tworzysz dwie zmienne (i i index) ktore maja ta sama wartosc?

No bo próbowałem to robić różnymi sposobami i nic, kompletnie nie działa.
Na EditBox'a działa, Buttony działają komunikaty a ComboBox'a nie!!

Załamka!! :|

0

sprawdz czy przypadkiem nie masz ustawionej obslugi unicode, w takim razie musialbys wysylac wchar_t* nie char* jako lparam.. ale skoro na edicie i buttonach dziala to watpie zeby to o to chodzilo.. szkoda ze dostaje sie lresult nie hresult :| spradz czy ow lresult zwracany przez sendmessage nie jest przypadkiem < zero. jesli rowna sie CB_ERRSPACE no to o to chodzi.. jak CB_ERR no to nie wiem - moze jakies getlasterror cos powie? a jak cos innego niz te dwa to wklej ow kod zwrocony

0

Dzięki wszystkim za chęć pomocy :)

Miało być tak:
SendMessage(GetDlgItem(hWnd, IDC_SIEC), CB_ADDSTRING, 0, (LPARAM)(LPCSTR)"Text");

Podawałem zły uchwyt do okna.
Podawałem globalny uchwyt, a miał być ten z argumentu funkcji procedury tego okna.

Dzięki wielkie.
Pozdrawiam.

0

Nie chciałem pisać drugiego tematu, napiszę tutaj.

Chyba nie ma nic gorszego niż kontrolka ComboBox [glowa]

Więc żeby było ze szczegółami, to mam tak:

W pliku zasobow:

COMBOBOX        IDC_SIEC,62,20,150,13,CBS_DROPDOWNLIST | CBS_HASSTRINGS

W kodzie:

case WM_INITDIALOG:
	SendMessage(GetDlgItem(hWnd, IDC_SIEC), CB_ADDSTRING, 0, (LPARAM)(LPCSTR)"Text 1");
	SendMessage(GetDlgItem(hWnd, IDC_SIEC), CB_ADDSTRING, 0, (LPARAM)(LPCSTR)"Text 2")

cd. w kodzie:

char* cSiec = new char[128];
GetDlgItemText(hBox, IDC_SIEC, cSiec, 128); // ta funkcja dziala dobrze, zwraca to co jest wybrane

I sobie najnormalniej w sciecie chcę sprawdziś jaka pozycja została wybrana, i zależnie od wybranej chce przypisac odpowiednią wartość do zmiennej.
Tu nie chodzi o ta zmienną, tylko o sprawdzenie jaka pozycja została wybrana z ComboBox'a ! :|

//.... ale porownienie juz do dup*
if(cSiec == "Text 1")
	MessageBox(0, "Text 1 OK", "Text 1 OK", MB_OK);
else if(cSiec == "Text 2")
	MessageBox(0, "Text 2 OK", "Text 2 OK", MB_OK);

// (ten MessaBox to taki przykladowy tylko, tu bedzie int z odpowiednim przypisaniem)

Za choler** nie działa poprawni, pierwszy if zwraca drugi, a drugi nie zwraca nic itp. [glowa]

Próbowałem też strcmp / strcmpi - bez skutku !

Pomoże ktoś ? ;/
Dzięki Wielki z Góry.

0

CB_GETCURSEL

1 użytkowników online, w tym zalogowanych: 0, gości: 1