[MFC] Notificare pentru check intr-un CListCtrl

Despre MFC, ATL si alte biblioteci C++ de la Microsoft (forum moderat)
Post Reply
User avatar
Ovidiu Cucu
Fondator
Fondator
Posts: 3778
Joined: 11 Jul 2007, 16:10
Judet: Iaşi
Location: Iasi
Contact:

[MFC] Notificare pentru check intr-un CListCtrl

Post by Ovidiu Cucu » 27 Apr 2009, 11:31

Avem un listview control (CListCtrl) cu stilurile LVS_REPORT si LVS_EX_CHECKBOXES.
listview with checkboxes.gif
listview with checkboxes.gif (2.12 KiB) Viewed 3820 times
Intrebare:
Ce notificare se trimite parintelui in momentul in care se schimba starea checkbox-ului corespunzator unui item (de exemplu, utilizatorul da un click intr-un checkbox)?

Raspuns: Schimbarea starii unui item intr-ul listview este semnalata ferestrei parinte prin notificarea LVN_ITEMCHANGED. Din pacate, nu este documentat cazul in care un checkbox a fost bifat sau debifat.
Totusi aceasta informatie este trimisa dupa cum urmeaza:
  • NMLISTVIEW::uNewState are setat bitul 13 daca checkbox-ul a fost bifat;
  • NMLISTVIEW::uNewState are setat bitul 12 daca checkbox-ul a fost debifat.

Exemplu:

Code: Select all

void CMyDialog::OnLvnItemchangedList(NMHDR *pNMHDR, LRESULT *pResult)
{
    LPNMLISTVIEW pNMLV = reinterpret_cast<LPNMLISTVIEW>(pNMHDR);

    if(pNMLV->uChanged & LVIF_STATE) // item state has been changed
    {
        switch(pNMLV->uNewState & 0x3000) // filter bits 12 and 13
        {
        case 0x2000: // new state: checked
            TRACE1("\n Item %d has been checked", pNMLV->iItem);
            break;
        case 0x1000: // new state: unchecked
            TRACE1("\n Item %d has been unchecked", pNMLV->iItem);
            break; 
        // ...
        }
    }
    *pResult = 0;
}
Vezi si Notificare pentru check intr-un CCheckListBox.

<< Back to MFC index



Post Reply