x-kom hosting

[ WinAPI, C++ ] Problem ze switchem... Mój program ogłupiał?!

Cansisti
utworzono
utworzono

Mam taki oto kod:
[CODE]
char ExtendNum = ComboBox_GetCurSel( hcombo );
switch( ExtendNum ) {
case 0:
Extend = ".txt";
break;
case 1:
Extend = ".log";
break;
case 2:
Extend = ".lst";
break;
case 3:
Extend = OtherExtand(); //Inna funkcja
break;
case CB_ERR:
pl.msg(1);
break;
default:
pl.msg(1);
break;
}
[/CODE]
I chociaż w comboboxie wybrałem opcję 2, 3 itd program uparcie zawsze wybiera case 0 (jestem pewien że tutaj leży błąd, bo wcześniej w case 0 dodałem funkcję MessageBox wywalającą napis "Wybrano txt" i jakąkolwiek opcję wybrałem to się działo)
Więc... czy mój program ogłupiał? Czy to ja nie widzę jakiegoś głupiego błędu? Z góry dziękuję :)

leggo
komentarz
komentarz

Switch wygląda w porządku. Powinno działać poprawnie (u mnie działa).
Spróbuj "rebuild solution", jeśli nie pomorze to wrzuć tutaj cały program lub jego [u][b]kompilujący się[/b][/u] wycinek zawierający wszystko dotyczące problemu.

Cansisti
komentarz
komentarz

Z racji iż nie lubię wklejać całego mojego kodu na forum (a nuż znajdzie się taki co sobie go skopiuje i rozpowie że to jego), skłoniło mnie to do spojrzenia w kod i wywalenia z niego nieistotnych dla problemu części i zobaczyłem że... zmienna HWND odpowiedzialna za ten mój combobox... była zadeklarowana 2 razy, raz jako globalna a raz w WInMain... nie wiem czemu kompilator się tego nie czepił ale wyglądało to tak:
[CODE]
HWND hCombo
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow ) {
HWND hCombo = CreateWindowEx(...); //usunąłem tutaj HWND
//itd
}
[/CODE]
W każdym razie dzięki za odpowiedź o dobrze działającym switchu, bo gdyby nie to dalej w nim szukałbym błędu.

leggo
komentarz
komentarz

Kompilator się nie czepiał, bo nie ma w tym nic zdrożnego. W momencie, gdy definiujesz zmienną lokalną o takiej samej nazwie co zmienna globalna, zmienna globalna jest przesłaniana przez lokalną. Czyli wszystkie odwołania do tej zmiennej w obrębie winmain tyczyły się jej wersji lokalnej i to ona była zmieniana. Tymczasem wewnątrz wndproc (poza winmain) używana była zmienna globalna, która pozostawała nietknięta od czasu deklaracji (miała wartość początkową).

Cansisti
komentarz
komentarz

No tak a ja tego comboboxa stworzyłem na tej zmiennej w winmain :)

Wciąż szukasz rozwiązania problemu? Napisz teraz na forum!

Możesz zadać pytanie bez konieczności rejestracji - wystarczy, że wypełnisz formularz.

×
×
  • Dodaj nową pozycję...

Powiadomienie o plikach cookie

Strona wykorzystuje pliki cookies w celu prawidłowego świadczenia usług i wygody użytkowników. Warunki przechowywania i dostępu do plików cookies możesz zmienić w ustawieniach przeglądarki.