Bonjour à tous,
Je suis entrain de faire une genre de list view, avec des colonne et des lignes. De plus, j'ai besion qu'elle puisse faire défiller ces éléments. Cependant, j'ai quelques difficultés à comprendre comment initialiser les scrollbar.
Jusqu'ici, il semble que la manière dont je l'ai initialisée soit correct puisque tout fonctionne bien. Mais je ne comprend pas pourquoi ! Voici le code que j'ai uitliser jusqu'ici :
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 30 31 32 33 34 35 36 37 38
|
// Taille de ma zone client (ma liste)
CRect rectZoneVisible;
GetClientRect( &rectZoneVisible );
// Est-ce que la liste possède un élément ?
if ( m_iRowCount > 0 )
{
// Taille de la colonne 0, (hauteur nécessaire)
CRect colRect;
GetClientColumnRect( 0, &colRect );
// Taille de la ligne 0 (hauteur nécessaire)
CRect rowRect;
GetClientRowRect( 0, &rowRect );
// Déterminer si la scrollbar vertical sera visible
if ( (m_iRowCount * rowRect.Height()) > rectZoneVisible.Height() -
colRect.Height() )
{
// Initialiser la scrollbar vertical
SCROLLINFO si;
si.cbSize = sizeof(SCROLLINFO);
si.fMask = SIF_ALL;
si.nPos = m_ScrollBarHiddenV.GetScrollPos();
si.nMin = 0;
si.nMax = m_iRowCount - 1;
si.nPage = rectZoneVisible.Height() / rowRect.Height();
si.nTrackPos = 0;
m_ScrollBarHiddenV.SetScrollInfo( &si, TRUE );
m_ScrollBarHiddenV.ShowScrollBar(TRUE);
...
}
else
{
m_ScrollBarHiddenV.ShowScrollBar(FALSE);
}
} |
Pourquoi
et pas ?
Deuxièmement, si nPage doit représenter le nombre d'élément visible par page alors pourquoi ne serait-il pas
nPage = (rectZoneVisible.Height() - colRect.Height()) / rowRect.Height();
À mon avis, il faut soustraire la hauteur des colonne à la zone visible (liste) pour déterminer combien d'élément seront visible par page ?
Si quelqu'un peut m'expliquer plus clairement.
Merci beaucoup.
Partager