Probleme la selectie item - ListControl

Intrebari legate de programarea cu biblioteci precum MFC, ATL, WTL si GDI+.
Post Reply
carrera
Junior
Junior
Posts: 38
Joined: 23 Aug 2007, 12:06

Probleme la selectie item - ListControl

Post by carrera » 27 Sep 2011, 13:21

Am un listcontrol care contine mai multe coloane si am implementat o functie de cautare - cu ajutorul "ListView_EnsureVisible" derulez lista pina apare ceea ce caut in lista (autoscroll) insa, problema e ca as vrea sa selectez coloana in care a fost gasit textul si nu stiu cum.
-Am cautat aici http://msdn.microsoft.com/en-us/library ... 85%29.aspx vreo functie dar n-am gasit nimic util.
-Mentionez ca am creat o variabila de control pentru lista insa nici o metoda nu functioneaza, apare un assert la executie (ASSERT(::IsWindow(m_hWnd)); - in afxcmn.inl).

Merci.

PS: Am incercat asa:

LVITEM lvi;
ZeroMemory(&lvi, sizeof(lvi));
lvi.mask = LVIF_STATE;
lvi.state = LVIS_SELECTED;
lvi.stateMask = LVIS_SELECTED;

HWND hWnd = ::GetDlgItem(m_hWnd, IDC_LIST1);

// LIST_CTRL1.SetItemState(2, &lvi); - imi da assert
// ListView_SetItemState(hWnd, 2,LVIS_SELECTED, LVIS_SELECTED) - nici un efect
// ::SendMessage(hWnd,LVM_SETITEMSTATE, (WPARAM)2,(WPARAM)&lvi); - nici un efect



User avatar
bu7ch3r
Membru++
Membru++
Posts: 326
Joined: 17 May 2011, 15:17
Judet: Iaşi
Location: Sofia
Contact:

Re: Probleme la selectie item - ListControl

Post by bu7ch3r » 27 Sep 2011, 21:47

Lista ta are header ?
Pune LIST_CTRL1.ModifyStyle(0, LVS_SHOWSELALWAYS); apoi LIST_CTRL1.SetItemState(i, LVIS_SELECTED, LVIS_SELECTED);
Cu stima,
Lupu Claudiu

carrera
Junior
Junior
Posts: 38
Joined: 23 Aug 2007, 12:06

Re: Probleme la selectie item - ListControl

Post by carrera » 28 Sep 2011, 07:26

Are header.
Nu, nu merge, dupa cum am mentionat nu merge cu variabile de control.Crapa la un assert: ASSERT(::IsWindow(m_hWnd)) in functia "ModifyStyle".

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

Re: Probleme la selectie item - ListControl

Post by Ovidiu Cucu » 28 Sep 2011, 08:28

Inainte de a merge mai departe.
carrera wrote:Crapa la un assert: ASSERT(::IsWindow(m_hWnd)) in functia "ModifyStyle".
Acel ASSERT spune clar ca m_hWnd nu este un handle de fereastra valid.
Cele mai posibile cauze:
  • Ai pus LIST_CTRL1 cu mana si nu ai functia DDX_Control corespunzatoare acelui control (verifica in DoDataExchange).
  • Chemi acele functii (ModifyStyle, SetItemState etc), undeva unde controlul nu a fost inca creat.
Deci?

// Cand ai astfel de probleme, nu strica sa ne dai un pic mai multe amanunte. Pot fi si alte cauze...

User avatar
bu7ch3r
Membru++
Membru++
Posts: 326
Joined: 17 May 2011, 15:17
Judet: Iaşi
Location: Sofia
Contact:

Re: Probleme la selectie item - ListControl

Post by bu7ch3r » 28 Sep 2011, 09:38

carrera wrote:Crapa la un assert: ASSERT(::IsWindow(m_hWnd)) in functia "ModifyStyle".
Ar fi util sa ne spui unde apelezi ModifyStyle.
Cu stima,
Lupu Claudiu

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

Re: Probleme la selectie item - ListControl

Post by Ovidiu Cucu » 29 Sep 2011, 12:12

Nimic, nimic?
Sau o fi top-secret... :)

carrera
Junior
Junior
Posts: 38
Joined: 23 Aug 2007, 12:06

Re: Probleme la selectie item - ListControl

Post by carrera » 30 Sep 2011, 09:24

imi cer scuze de intirziere, locuiesc intr-o zona unde am net doar cind bate vantul
@bu7ch3r
O apelez in functia asociata unui buton, in aceeasi clasa in care am si lista + variabila ei de control.

@Ovidiu
-In DoDataExchange e totul ok, ID-ul listei e asociat cu numele variabilei de control - DDX_Control(pDX, IDC_LIST1, LIST_CTRL1);
-La a doua intrebare nu cred ca e cazul, totusi unele functii isi fac efectul, de ex. schimbarea font-ului sau culorii listei (dar nu folosind variabila de control).
-O chestie ciudata e ca inca de la inceput variabilele de control nu au functionat, indiferent ca am un combo, edit sau listbox.M-am gandit ca se intimpla din cauza ca metodele acestor variabile trimit mesajele direct catre fereastra principala si nu ferestrei "child" in care eu lucrez.Mentionez ca am o fereastra principala si mai multe ferestre tip child sub forma de Tab-uri.
Ceva de genul:
Intr-o clasa "TabedFrame"

CMultiDocTemplate* pDocTemplate;
pDocTemplate = new CMultiDocTemplate(IDR_TabbedFrameTYPE,
RUNTIME_CLASS(CTabbedFrameDoc),
RUNTIME_CLASS(CChildFrame), // custom MDI child frame
RUNTIME_CLASS(CTabbedFrameView)); // Aici am clasa (tab-ul) in care lucrez, am tot felul de controale a caror variabile de control nu functioneaza - le //controlez doar cu functii winapi
AddDocTemplate(pDocTemplate);

Iar in clasa "CChildFrame" am o functie:

BOOL CChildFrame::OnCreateClient(LPCREATESTRUCT lpcs, CCreateContext* pContext)
{
DefineTab(CTabbedMDIChildWnd::CTabItem("NumeTab",RUNTIME_CLASS(CTabbedFrameView)));

return CTabbedMDIChildWnd::OnCreateClient(lpcs,pContext);
}

"CTabbedMDIChildWnd" - este o clasa care se ocupa de management-ul Tab-urilor (schimbarea tab-urilor intre ele,etc.)

Am pornit totul de la un mic exemplu de pe codeproject, l-am dezvoltat f. mult dar n-am stiut ca in timp o sa se complice treaba adica sa apara noi si noi cerinte.Daca mai gasesc exemplul ala, pot trimite link-ul.

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

Re: Probleme la selectie item - ListControl

Post by Ovidiu Cucu » 01 Oct 2011, 13:37

carrera wrote:Am pornit totul de la un mic exemplu de pe codeproject, ...
Pai zi asa! Pe codeprojecturi ne putem astepta oricand la tot felul surprize. ;)
M-am uitat in globul de cristal si-am vazut ca un fix rapid ar fi acesta:

Code: Select all

CChildFrame::OnCreateClient(LPCREATESTRUCT lpcs, CCreateContext* pContext)
{
   DefineTab(CTabbedMDIChildWnd::CTabItem("View",RUNTIME_CLASS(CTabbedFrameView)));
   // the other tabs...

   int nRet = CTabbedMDIChildWnd::OnCreateClient(lpcs,pContext);

   if(nRet != 0)
   {
      m_wndTabs.SetCurSel(0);
      NMHDR nmhdr = {0};
      LRESULT lResult = 0;
      CTabbedMDIChildWnd::OnTabChange(&nmhdr, &lResult);
   }
   return nRet;
}
Ia vezi, acuma merje?

carrera
Junior
Junior
Posts: 38
Joined: 23 Aug 2007, 12:06

Re: Probleme la selectie item - ListControl

Post by carrera » 05 Oct 2011, 08:24

nu prea... merci oricum, o sa caut exemplul ala.

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

Re: Probleme la selectie item - ListControl

Post by Ovidiu Cucu » 05 Oct 2011, 08:29

carrera wrote:nu prea... merci oricum, o sa caut exemplul ala.
"Nu prea" sau deloc?
E vorba despre articolul din link-ul pe care l-am dat mai sus sau nu?

carrera
Junior
Junior
Posts: 38
Joined: 23 Aug 2007, 12:06

Re: Probleme la selectie item - ListControl

Post by carrera » 05 Oct 2011, 12:25

deloc :) nu e acelasi articol, era un indian ca autor din cite imi amintesc.

Post Reply