Dobra, mam pewną koncepcje na zrobienie tego, natomiast napotkałem pewien problem.
Chciałem zrobić tablice CButton'ów :
Kopiuj
CButton * CheckboxContainer = new CButton[numbObj];
Problem polega na tym, że numbObj znamy dopiero po przeczytaniu pliku.
Próbowałem zrobić coś takiego:
Kopiuj
CButton * CheckboxContainer;
[...]
CheckboxContainer = new CButton[numbObj];
Niestety po czymś takim program się nie włącza (mimo pomyślnej kompilacji).
Kopiuj
for (int i=0; i<numbObj; i++)
{
CheckboxContainer[i].Create(_T("&objaw"), WS_CHILD | WS_VISIBLE | BS_AUTOCHECKBOX, CRect(10, 25+30*i, 100, 40+30*i), this, 0x11);
label = chorobiszcza->objawy[i];
Clabel.Format(_T("%S"), label.c_str());
CheckboxContainer[i].SetWindowTextW(Clabel);
}
próbowałem wykorzystać też vector
Kopiuj
std::vector<CButton*> CheckboxContainer
CButton *button = new CButton;
for (int i=0; i<numbObj; i++)
{
if(button->Create(_T("&objaw"), WS_CHILD | WS_VISIBLE | BS_AUTOCHECKBOX, CRect(10, 25+30*i, 100, 40+30*i), this, 0x11))
{
CheckboxContainer.push_back(button);
}
label = chorobiszcza->objawy[i];
Clabel.Format(_T("%S"), label.c_str());
CheckboxContainer[i].SetWindowTextW(Clabel);
}
Niestety program wykrzaczał się przy próbie uruchomienia (problem z pamięcią, cały czas ten sam przycisk wrzucałem do vectora).
Próbowałem w pętli tworzyć przycisk, dodawać do vectora, a następnie usuwać.
Kopiuj
for (int i=0; i<numbObj; i++)
{
CButton *button = new CButton;
if(button->Create(_T("&objaw"), WS_CHILD | WS_VISIBLE | BS_AUTOCHECKBOX, CRect(10, 25+30*i, 100, 40+30*i), this, 0x11))
{
CheckboxContainer.push_back(button);
}
button->CloseWindow();
label = chorobiszcza->objawy[i];
Clabel.Format(_T("%S"), label.c_str());
CheckboxContainer[i].SetWindowTextW(Clabel);
}
Program się włączał, niestety nie tworzył żadnego przycisku.
W vectorze zapisywane są wskaźniki do objektów, tak? Czyli usuwając ten obiekt (button->CloseWindow()) usuwałem go na dobre?
ktoś ma jakieś pomysły?
pozdrawiam