CListCtrlEx in CListView

Intrebari legate de programarea cu biblioteci precum MFC, ATL, WTL si GDI+.
Post Reply
mesajflaviu
Membru++
Membru++
Posts: 684
Joined: 10 Sep 2008, 21:40
Judet: Cluj

CListCtrlEx in CListView

Post by mesajflaviu » 17 Mar 2010, 16:24

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



User avatar
Ovidiu Cucu
Fondator
Fondator
Posts: 3776
Joined: 11 Jul 2007, 16:10
Judet: Iaşi
Location: Iasi
Contact:

Re: CListCtrlEx in CListView

Post by Ovidiu Cucu » 17 Mar 2010, 18:43

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

mesajflaviu
Membru++
Membru++
Posts: 684
Joined: 10 Sep 2008, 21:40
Judet: Cluj

Re: CListCtrlEx in CListView

Post by mesajflaviu » 17 Mar 2010, 18:53

Am incercat asta , si mesajul este clar :
CListCtrl nu este un CListCtrlEx --> BAD CAST!
:shock:

mesajflaviu
Membru++
Membru++
Posts: 684
Joined: 10 Sep 2008, 21:40
Judet: Cluj

Re: CListCtrlEx in CListView

Post by mesajflaviu » 17 Mar 2010, 19:08

Ca sa fie mai clar , o sa atasez in scurt timp aplicatia de test .

mesajflaviu
Membru++
Membru++
Posts: 684
Joined: 10 Sep 2008, 21:40
Judet: Cluj

Re: CListCtrlEx in CListView

Post by mesajflaviu » 17 Mar 2010, 19:15

Mentionez inca o data ca aceasta clasa , CListCtrlEx , merge foarte bine pe un formview ...
Attachments
TestList3.rar
(87.58 KiB) Downloaded 312 times

User avatar
Ovidiu Cucu
Fondator
Fondator
Posts: 3776
Joined: 11 Jul 2007, 16:10
Judet: Iaşi
Location: Iasi
Contact:

Re: CListCtrlEx in CListView

Post by Ovidiu Cucu » 18 Mar 2010, 09:42

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.

User avatar
Ovidiu Cucu
Fondator
Fondator
Posts: 3776
Joined: 11 Jul 2007, 16:10
Judet: Iaşi
Location: Iasi
Contact:

Re: CListCtrlEx in CListView

Post by Ovidiu Cucu » 18 Mar 2010, 09:49

Despre cum ai putea rezolva problema este un articol la Codeguru: http://www.codeguru.com/cpp/controls/li ... e.php/c901

mesajflaviu
Membru++
Membru++
Posts: 684
Joined: 10 Sep 2008, 21:40
Judet: Cluj

Re: CListCtrlEx in CListView

Post by mesajflaviu » 18 Mar 2010, 09:52

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:

User avatar
Ovidiu Cucu
Fondator
Fondator
Posts: 3776
Joined: 11 Jul 2007, 16:10
Judet: Iaşi
Location: Iasi
Contact:

Re: CListCtrlEx in CListView

Post by Ovidiu Cucu » 18 Mar 2010, 10:15

mesajflaviu wrote: P.S.
Nu poti transforma rama-n porc doar spunandu-i "Esti un porc!"
Tare ! :biggrin:
Poate doar Chuck Norris. :)

mesajflaviu
Membru++
Membru++
Posts: 684
Joined: 10 Sep 2008, 21:40
Judet: Cluj

Re: CListCtrlEx in CListView

Post by mesajflaviu » 26 Aug 2014, 14:14

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.

Post Reply