MFC] Kolom in ListCtrl over volle breedte

Pagina: 1
Acties:

  • Olaf van der Spek
  • Registratie: September 2000
  • Niet online
Hoe kan ik in report view van een ListCtrl met een kolom ervoor zorgen dat die kolom altijd net zo breed is als de ListCtrl zelf?

Hmm, ik ben de titel een beetje vergeten.

  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

Wat wil je als titel? :)

  • Olaf van der Spek
  • Registratie: September 2000
  • Niet online
[MFC] Kolom in ListCtrl over volle breedte

Verwijderd

SetColumn

Kijk maar in de help van visual studio, of op msdn.microsoft.com/library

  • Olaf van der Spek
  • Registratie: September 2000
  • Niet online
Ja, SetColumnWidth ken ik wel. Maar waar hel ik de max width vandaan dan?

Verwijderd

Op vrijdag 04 januari 2002 20:36 schreef OlafvdSpek het volgende:
Ja, SetColumnWidth ken ik wel. Maar waar hel ik de max width vandaan dan?
probeer dit eens..
code:
1
2
3
4
5
6
7
    CRect rect;
    m_ListCtrl.GetClientRect(&rect);
    LVCOLUMN Column; 
    Column.mask = LVCF_WIDTH;
    Column.cx   = rect.Width(); 

    m_ListCtrl.SetColumn(1,&Column);

geen idee of het zal werken overigens :)

  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

titel bijgeklust :)

  • Olaf van der Spek
  • Registratie: September 2000
  • Niet online
Werkt niet, de breedte blijft gewoon hetzelfde als met m_list.SetColumnWidth(0, LVSCW_AUTOSIZE_USEHEADER);

Verwijderd

hmm, bij mij werktie wel... tenminste, bij een CListCtrl met 4 colummen (report view), waarbij ik voor de test die code heb toegepast die ik net postte, zodat de eerste column de hele breedte beslaat...

Maar jij hebt maar 1 column? of meerdere, maar je wilt op eenbepaald moment 1 column over de totale breedte hebben?

  • Olaf van der Spek
  • Registratie: September 2000
  • Niet online
Ik heb maar een kolom.
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
BOOL CSearchFileDlg::OnInitDialog() 
{
    ETSLayoutDialog::OnInitDialog();
    ListView_SetExtendedListViewStyle(m_list.m_hWnd, ListView_GetExtendedListViewStyle(m_list.m_hWnd) | LVS_EX_FULLROWSELECT);
    m_list.InsertColumn(0, "Name");
    CRect rect;
    m_list.GetClientRect(&rect);
    m_list.SetColumnWidth(0, rect.Width()); // LVSCW_AUTOSIZE_USEHEADER);
    CreateRoot(VERTICAL)
        << (pane(HORIZONTAL, ABSOLUTE_VERT)
            << item(IDC_FILENAME_STATIC, NORESIZE)
            << item(IDC_FILENAME, GREEDY)
            )
        << (pane(HORIZONTAL, GREEDY)
            << item(IDC_LIST, GREEDY)
            )
        << (pane(HORIZONTAL, ABSOLUTE_VERT)
            << itemGrowing(HORIZONTAL)
            << item(IDOK, NORESIZE)
            << item(IDCANCEL, NORESIZE)
            );
    UpdateLayout();
    return true;
}

  • Olaf van der Spek
  • Registratie: September 2000
  • Niet online
Sorry, was mijn fout. Die UpdateLayout is voor het dynamisch indelen/resizen van de controls op het dialoogvenster. En daarvoor is de ListCtrl heel erg klein en leek het niet te werken, maar nu ik de code erna geplaatst heb werkt het perfect.

  • Olaf van der Spek
  • Registratie: September 2000
  • Niet online
Oplossing:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
BOOL CSearchFileDlg::OnInitDialog() 
{
    ETSLayoutDialog::OnInitDialog();
    ListView_SetExtendedListViewStyle(m_list.m_hWnd, ListView_GetExtendedListViewStyle(m_list.m_hWnd) | LVS_EX_FULLROWSELECT);
    m_list.InsertColumn(0, "Name");
    CreateRoot(VERTICAL)
        << (pane(HORIZONTAL, ABSOLUTE_VERT)
            << item(IDC_FILENAME_STATIC, NORESIZE)
            << item(IDC_FILENAME, GREEDY)
            )
        << (pane(HORIZONTAL, GREEDY)
            << item(IDC_LIST, GREEDY)
            )
        << (pane(HORIZONTAL, ABSOLUTE_VERT)
            << itemGrowing(HORIZONTAL)
            << item(IDOK, NORESIZE)
            << item(IDCANCEL, NORESIZE)
            );
    UpdateLayout();
    m_list.SetColumnWidth(0, LVSCW_AUTOSIZE_USEHEADER);
    return true;
}

void CSearchFileDlg::OnSize(UINT nType, int cx, int cy) 
{
    ETSLayoutDialog::OnSize(nType, cx, cy);
    if (m_list.GetSafeHwnd())
        m_list.SetColumnWidth(0, LVSCW_AUTOSIZE_USEHEADER);
}

  • Olaf van der Spek
  • Registratie: September 2000
  • Niet online
Op vrijdag 04 januari 2002 20:44 schreef ACM het volgende:
titel bijgeklust :)
Je bent een '[' vergeten.
Pagina: 1