Witam.
Pod MFC VC++ 6.0
CListBox nie obsługi kliknięcia prawym przyciskiem myszy.
Ponadto, przy wyłączonym stylu multiple-select nie działa odznaczanie (unselect) podczas wykonania CListBox::OnSelchangexxx() tj:
wg MSDN: Use this member function only with multiple-selection list boxes.
CListBox m_cFileLista;
nrSelectListPliki=-1;
// drugie kliknięcie na poprzednio zaznaczoną linię ma ją odznaczać
void MyDlg::OnSelchangeMyListBox()
{
unsigned int i_pom=m_cFileLista.GetCurSel();
if (nrSelectListPliki==-1)
{
nrSelectListPliki=i_pom; //first select
return;
}
if (nrSelectListPliki==i_pom)
{
m_cFileLista.SetSel(i_pom,true); //unselect
nrSelectListPliki=-1;
return;
}
nrSelectListPliki=i_pom; //other select
return;
}
Włączając styl multiple-select idzie zrobić unselect, ale jest to naginanie:
void MyDlg::OnSelchangeMyListBox()
{
unsigned int i_pom=m_cFileLista.GetCurSel();
if (nrSelectListPliki==-1)
{
nrSelectListPliki=i_pom; //first select
return;
}
if (nrSelectListPliki==i_pom)
{
//każda wersja robi to samo....
//m_cFileLista.SelItemRange(false,0,m_cFileLista.GetCount()); //unselect
//m_cFileLista.SetCurSel( -1 );
for (j_pom=0; j_pom<m_cFileLista.GetCount(); j_pom++)
m_cFileLista.SetSel(j_pom,false);
nrSelectListPliki=-1;
return;
}
for (unsigned int j_pom=0; j_pom<m_cFileLista.GetCount(); j_pom++) //other select
{
if (i_pom!=j_pom) m_cFileLista.SetSel(j_pom,false);
}
nrSelectListPliki=i_pom;
return;
}
Działa, ale....
Znalazłem w sieci, że można do kontrolki CListBox dodać obsługę prawego kliku myszy:
in your OnRButtonDown handler call ( ( CListBox* )GetDlgItem( IDC_MYLISTBOX) )->SetCurSel( -1 );
tylko jak to dodać do aplikacji Dialog dla MFC [???]