Réponse acceptée !
Bien sur, si ça peut t'aider.
Tu dois ajouter à ta boite à outils VStudio le controle activeX
MS-hierarchicalFlexGrid Version 6. (Component gallery pour c++6 ou objets COM pour .net), ensuite tu le fait glisser sur un dialog et tu ajoute une var membre comme pour un bouton ou autre. VStudio va générer une classe wrapper (.h et .cpp), puis tu utiliseras les méthodes et constantes du wrapper.
EX :
//Dans ta class dialog.h
#include "msflexgrid1.h"
CMsflexgrid1 m_flexgrid;
// Dans onDraw() par exemple
int nbrChamp;
int nbrLigne;
// Cela sert pour des données exemples
// peut provenir d'un tab ou base de données ect....
int i;
int posSepar = 0;
int ancienPos = 0;
int nDebutLigne = 0, nFinLigne = 0;
CString sLigne(_T(""));
CString extract(_T(""));
// Données exemples
CString header[4] = {_T("idHeader"),_T("ChampTexte"),
_T("ChampFloat"),_T("ChampDate")};
CString sResultat(_T("100|texte 1|125.25|28/06/2004 01:12:00|\r\n")
_T("200|texte 2|100.55|10/02/2001 10:02:00|\r\n")
_T("300|texte 3|110.10|NULL|\r\n"));
m_flexgrid.Clear();
// nombre de lignes fixe à la création, donc modifiées ici
m_flexgrid.put_Rows((long)nbrLigne+1);
// Ecrit les entêtes du flexgrid, largeur & alignement gauche
for(i=0; i<nbrChamp; i++)
{
m_flexgrid.put_TextMatrix(0, i, header[i]);
m_flexgrid.put_ColAlignment(i, CMsflexgrid1::flexAlignLeftCenter);
m_flexgrid.put_ColWidth(i, 1400L);
}
// Extrait les données par ligne et champs
for(i=0; i<nbrLigne; i++)
{
posSepar = 0;
ancienPos = 0;
nFinLigne = sResultat.Find("\r\n", nDebutLigne);
sLigne = sResultat.Mid(nDebutLigne, nFinLigne-nDebutLigne);
nDebutLigne = nFinLigne + 2;
for(int k=0; k<nbrChamp; k++)
{
// BackColor ligne paires plus foncées
if( i%2 == 0 )
{
m_flexgrid.put_Row((long)i+1);
m_flexgrid.put_Col((long)k);
m_flexgrid.put_CellBackColor((unsigned long)RGB(240,240,240));
}
// déformate val & insère dans colonnes
if( (posSepar = sLigne.Find('|', ancienPos)) != -1 )
{
extract = sLigne.Mid(ancienPos, (posSepar-ancienPos));
ancienPos = posSepar + 1;
m_flexgrid.put_TextMatrix(i+1, k, (LPCTSTR)extract);
}
else
{
m_flexgrid.put_TextMatrix(i+1, k, _T("NULL"));
}
}
}
// Les fausses données sont séparés par des '|' car c'est un morceau de code que j'utilise moi meme, mais tu peux faire plus simple en ne mettant que des données numériques.