[MFC] Dynamiczne tworzenie checkbox'ów.

0

Witam.
Robię prostą wyszukiwarkę chorób.
Na podstawie podanych objawów znajduje mi pasujące choroby (jeśli zgodność jest powyżej jakiegoś progu),
następnie podaje co to za choroba, oraz leczenie i profilaktykę.
Mam 3 pliki tekstowe (do objawów (dla danej choroby), chorób oraz leczenia).
Chciałbym dynamicznie stworzyć check boxy, np dla każdego objawu z 'bazy'.
W tej chwili z palca zrobilem pare check boxow, natomiast jesli chcialbym poszerzyc 'baze' chorob, musze przebudowywac caly program.
Jakieś podpowiedzi jak mógłbym to zrealizować?

pozdrawiam

0

raz robiłem projekt w MFC i powiem Ci, że to jest jakaś paranoja

tam jest document i view?

nie pamiętam dokładnie, poszukaj jakiś kurs, pewnie trzeba załadować je w document a potem updatnąć view

0

Dobra, mam pewną koncepcje na zrobienie tego, natomiast napotkałem pewien problem.
Chciałem zrobić tablice CButton'ów :

 
CButton * CheckboxContainer = new CButton[numbObj];

Problem polega na tym, że numbObj znamy dopiero po przeczytaniu pliku.
Próbowałem zrobić coś takiego:

 
CButton * CheckboxContainer;
[...]
CheckboxContainer = new CButton[numbObj];

Niestety po czymś takim program się nie włącza (mimo pomyślnej kompilacji).

 
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

 
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ć.

 
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

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