Page 1 of 1

CListCtrlEx in CListView

Posted: 17 Mar 2010, 16:24
by mesajflaviu
Intr-un proiect SDI , cu CView bazat pe CListView , as vrea sa folosesc un alt CListCtrl , numit CListCtrlEx ( derivat din CListCtrl ) :
in header-ul CTestList3View :

Code: Select all

...
#include "ListCtrlEx.h"
...
iar in CTestList3View::OnInitialUpdate()

Code: Select all

void CTestList3View::OnInitialUpdate()
{
	CListView::OnInitialUpdate();

	// TODO: You may populate your ListView with items by directly accessing
	//  its list control through a call to GetListCtrl().

	CListCtrlEx& List1 = (CListCtrlEx&)GetListCtrl();;
	List1.SetExtendedStyle(LVS_EX_FULLROWSELECT | LVS_EX_GRIDLINES | LVS_EX_HEADERDRAGDROP | LVS_EX_INFOTIP);

	List1.InsertColumn(0, "Integer", LVCFMT_LEFT, 90);
	List1.InsertColumn(1, "Date Time", LVCFMT_LEFT, 90);
	List1.InsertColumn(2, "String", LVCFMT_LEFT, 60);
	List1.InsertColumn(3, "Color Select", LVCFMT_LEFT, 90);
	List1.InsertColumn(4, "Read Only Column", LVCFMT_LEFT, 50);
/* de aici nu mai merge codul */
	CString strDate = COleDateTime(CTime::GetCurrentTime().GetTime()).Format();
	CString str;
	str.Format("%d", rand());
	List1.InsertItem(0, str);
	List1.SetItemText(0, 1, strDate);
	List1.SetItemText(0, 2, "test");
	List1.SetItemText(0, 3, "blue");
	List1.SetItemText(0, 4, "read only");
}
problema e ca daca incerc sa inserez vreun rand in aceasta lista imi da eroare ... care sa fie problema : nu am obtinut bine pointer-ul spre CListCtrlEx ? Daca e asa , de ce pot seta coloanele listei ?

Mentionez ca aceasta clasa ( CListCtrlEx ) functioneaza bine intr-un proiect DialogBased ... daca trebuie , pot atasa si codul sursa al clasei ...

Re: CListCtrlEx in CListView

Posted: 17 Mar 2010, 18:43
by Ovidiu Cucu
Fa testul asta si-ai sa vezi de unde sare iepuroiu. ;)

Code: Select all

void CTstLstView::OnInitialUpdate()
{
    CListView::OnInitialUpdate();
    // CListCtrlEx& List1 = (CListCtrlEx&)GetListCtrl();
    try
    {
        CListCtrl& refList = GetListCtrl();
        CListCtrlEx& List1 = dynamic_cast<CListCtrlEx&>(refList);
        // ...celelalte chestii cu List1
    }
    catch(...)
    {
        AfxMessageBox(_T("CListCtrl nu este un CListCtrlEx --> BAD CAST!"));
    }
}
Sa nu uiti sa faci mai intai enable la RTTI (Run-Time Type Info), undeva pe la "Settings C/C++ Language".

Re: CListCtrlEx in CListView

Posted: 17 Mar 2010, 18:53
by mesajflaviu
Am incercat asta , si mesajul este clar :
CListCtrl nu este un CListCtrlEx --> BAD CAST!
:shock:

Re: CListCtrlEx in CListView

Posted: 17 Mar 2010, 19:08
by mesajflaviu
Ca sa fie mai clar , o sa atasez in scurt timp aplicatia de test .

Re: CListCtrlEx in CListView

Posted: 17 Mar 2010, 19:15
by mesajflaviu
Mentionez inca o data ca aceasta clasa , CListCtrlEx , merge foarte bine pe un formview ...

Re: CListCtrlEx in CListView

Posted: 18 Mar 2010, 09:42
by Ovidiu Cucu
Nu poti transforma rama-n porc doar spunandu-i "Esti un porc!" :)
Vezi si discutia http://www.codexpert.ro/forum/viewtopic.php?f=5&t=1336.

Code: Select all

CListCtrlEx& List1 = (CListCtrlEx&)GetListCtrl();
List1 este intradevar o referinta tip CListCtrlEx dar pointeza la (se refera la) un obiect tip CListCtrl.
CListCtr este clasa de baza pentru CListCtrEx deci obiectul referit de List1 contine mai putina "materie" decat ar contine un obiect tip CListCtrlEx si de aici... probleme. De aceea am dat testul acela cu dynamic_cast.
In plus, view-ul nu va avea cum sa stie ca tu vrei un CListCtrlEx (el stie de CListCtrl si gata) si de aici... alte probeme.

Re: CListCtrlEx in CListView

Posted: 18 Mar 2010, 09:49
by Ovidiu Cucu
Despre cum ai putea rezolva problema este un articol la Codeguru: http://www.codeguru.com/cpp/controls/li ... e.php/c901

Re: CListCtrlEx in CListView

Posted: 18 Mar 2010, 09:52
by mesajflaviu
Multumesc pentru lamuriri , am inteles care e problema , o sa incerc sa o rezolv .
P.S.
Nu poti transforma rama-n porc doar spunandu-i "Esti un porc!"
Tare ! :biggrin:

Re: CListCtrlEx in CListView

Posted: 18 Mar 2010, 10:15
by Ovidiu Cucu
mesajflaviu wrote: P.S.
Nu poti transforma rama-n porc doar spunandu-i "Esti un porc!"
Tare ! :biggrin:
Poate doar Chuck Norris. :)

Re: CListCtrlEx in CListView

Posted: 26 Aug 2014, 14:14
by mesajflaviu
Ice bucket challenge:
Bill Gates si-a turnat in cap o galeata de apa cu gheata in cap.
Chuck Norris si-a turnat in cap o galeata de apa clocotita.