Atasare CHeaderCtrlEx la CListCtrlEx

Intrebari legate de programarea cu biblioteci precum MFC, ATL, WTL si GDI+.
User avatar
Ovidiu Cucu
Fondator
Fondator
Posts: 3778
Joined: 11 Jul 2007, 16:10
Judet: Iaşi
Location: Iasi
Contact:

Re: Atasare CHeaderCtrlEx la CListCtrlEx

Post by Ovidiu Cucu » 02 Jun 2011, 19:11

mesajflaviu wrote:
Ovidiu Cucu wrote:In pimul rand, de ce incerci sa "deturnezi" toate mesajele lui "CTestList6View" ?
Pai cred ca asta face codul din PreTranslateMessage(...) dupa modelul articolului din codeguru ....
La Codeguru, Codeproject s.a.m.d. apar articole in care nenea cutare a rezlvat o anumita probema intr-un anumit caz particular.



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

Re: Atasare CHeaderCtrlEx la CListCtrlEx

Post by mesajflaviu » 02 Jun 2011, 20:04

Sa substitui m_List cu GetListCtrl() in modul urmator e o prostie :

Code: Select all

protected:
	CListCtrlEx m_List;
public:
	CListCtrlEx* GetListCtrl()
	{
		return &m_List;
	}
am incercat asta ...si nu pot renunta nici la cele trei evenimente suprascrise (PreTranslateMessage,OnChildNotify,WindowProc) in CTestList6View. Am incercat si asta. Totusi , e ciudat ca WM_TIMER nu trece prin CTestList6View::OnTimer(UINT nIDEvent) decat o data ... mai sap , sa vad de ce .

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

Re: Atasare CHeaderCtrlEx la CListCtrlEx

Post by Ovidiu Cucu » 03 Jun 2011, 10:39

mesajflaviu wrote:
Ovidiu Cucu wrote:In pimul rand, de ce incerci sa "deturnezi" toate mesajele lui "CTestList6View" ?
Pai cred ca asta face codul din PreTranslateMessage(...) dupa modelul articolului din codeguru ....

Domnul Zafir Anjum spunea asa la data de 6 August 1998:

If you weren't satisfied with the answer to this same issue in the previous topic then maybe this one will. However, there is a big risk involved. It uses some undocumented features of MFC and maybe I haven't got all the angles covered. So use this at your own RISK.

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

Re: Atasare CHeaderCtrlEx la CListCtrlEx

Post by Ovidiu Cucu » 03 Jun 2011, 20:07

"Nu v-am spus dar va repet" :D
In momentul in care, in MFC, apare ca o necesitate suprascrierea de functii virtuale generice gen WindowProc, primul lucru care ar trebui sa ne treaca prin cap este "E ceva putred in Danemarca". Pardon, e ceva putred in design-ul proiectului nostru.

Ca tot traim in era Google, poti gasi N omuleti care pun aceeasi obsedanta intrebare: "How do I use a derived CListCtrl with a CListView?".
Raspusul corect, scurt si pe sleau este "You don't". A spus-o chiar nenea Zafir, cu mult timp in urma http://www.codeguru.com/cpp/controls/li ... e.php/c919

De ce nu? Simplu.
CListView NU incapsuleaza un obiect tip CListCtrl ci pur si simplu este o clasa wrapper peste controlul Windows "SysListView32".
Vede cineva vreun membru tip CListCtrl in clasa CListView? Eu nu.

De ce merge acel CListView::GetListCtrl care nu face altceva decat cast la CListCtrl din 'this CListView'? Simplu.
Pentru ca, CListCtrl ca si CListView este tot un wrapper peste controlul Windows "SysListView32".
Deosebirea intre cele doua clase consta doar in locul lor in framework-ul MFC.

Orice incercare de "use a derived CListCtrl with a CListView" prin tot felul de giumbuslucuri, incluzand "deturnari" de mesaje sfarseste inevintabil intr-un singur lucru: dureri de cap.

Cum s-ar putea rezolva asta? Simplu.
Pui acel control ListView customizat intr-un form view (clasa derivata din CFormView) care sa n-aiba alta treaba decat sa-l redimensioneze in WM_SIZE.
In rest, derivezi din acea clasa orice vrea muschii tai si lasi MFC-ul si ClassWizard-ul sa-si faca treaba,

Post Reply