Api win32 listview dans tabcontrol c++

cs_Spunk62 Messages postés 12 Date d'inscription mardi 23 septembre 2008 Statut Membre Dernière intervention 15 mai 2010 - 10 juin 2009 à 12:34
cs_Spunk62 Messages postés 12 Date d'inscription mardi 23 septembre 2008 Statut Membre Dernière intervention 15 mai 2010 - 11 juin 2009 à 23:28
Bonjour,

je cherche a mettre une listview dans un tab control (par exemple si onglet 1 afficher listview sinon non)


ma listview (reçois un tableau ):

 
void listview (HWND hlistview,HWND hDlg)
{
 
DestroyWindow(hlistview);
 
//MessageBox(NULL,tab[2][11],"barre de titre",MB_OK| MB_ICONEXCLAMATION);
// Définir le titre de la boite de dialogue:
SetWindowText(hDlg,tab[1][0]);
//Créer les controles:
 
hlistview=CreateWindowEx(WS_EX_CLIENTEDGE,WC_LISTVIEW,0, WS_CHILD | WS_VISIBLE | LVS_REPORT | LVS_SHOWSELALWAYS | LVS_SINGLESEL ,10, 30, 620, 320, hDlg, 0, 0, 0);
SendMessage(hlistview,LVM_SETEXTENDEDLISTVIEWSTYLE,0,LVS_EX_FULLROWSELECT | LVS_EX_GRIDLINES );
// Créer les colonnes de la ListView:
LVCOLUMN lvc;
lvc.mask = LVCF_FMT | LVCF_WIDTH | LVCF_TEXT |LVCF_SUBITEM;
lvc.fmt = LVCFMT_CENTER;
lvc.iSubItem =0; lvc.cx = 0; lvc.pszText = 0;
 
for(d=0;d<12;d++)
{
SendMessage(hlistview,LVM_INSERTCOLUMN,d,(LPARAM)&lvc);
lvc.iSubItem =1; lvc.cx = 100; lvc.pszText =tab[2][d];
}
SendMessage(hlistview,LVM_INSERTCOLUMN,12,(LPARAM)&lvc);
// Ajout des éléments de la ListView:
lvi.mask=LVIF_TEXT | LVIF_STATE ;
//char* contenu[]={"1","France","Paris","2","Allemagne","Berlin","3","Angleterre","London","4","Italie","Rome","5","Espagne","Madrid"};
int i;
for(i=0;i<nbligne;i++)
{
for(c=0;c<=12;c++)
{
lvi.iItem=i;
lvi.iSubItem=c;
SendMessage(hlistview,LVM_INSERTITEM ,c,(LPARAM)&lvi);

lvi.iSubItem=c;
lvi.pszText=tab[i+3][c-1];
SendMessage(hlistview,LVM_SETITEMTEXT ,i,(LPARAM)&lvi);
}
}
}


le programme principale:

 
BOOL CALLBACK DlgProc(HWND hDlg,UINT message, WPARAM wParam, LPARAM lParam)
{
int wmId, wmEvent;
static HWND hlistview;
 
HWND hTabCtrl = GetDlgItem(hDlg, IDC_TAB1);
TCITEM tci;
 
switch(message)
{
case WM_INITDIALOG:
 
tci.mask = TCIF_TEXT;
tci.pszText = "Onglet 2";
SendMessage(hTabCtrl, TCM_INSERTITEM, 1, (LPARAM) &tci);
tci.mask = TCIF_TEXT;
tci.pszText = "Onglet 1";
SendMessage(hTabCtrl, TCM_INSERTITEM, 0, (LPARAM) &tci);
 
//listview (hlistview,hDlg);

NMHDR nmhdr;
nmhdr.code=TCN_SELCHANGE;
nmhdr.hwndFrom=hTabCtrl;
SendMessage(hDlg,WM_NOTIFY,0,(LPARAM)&nmhdr);
 
break;
case WM_NOTIFY:
NMHDR* pnmh;
pnmh = (NMHDR*)lParam;
// S'assurer qu'il s'agit d'un changement d'onglet:if(pnmh->hwndFrom hTabCtrl && pnmh->code TCN_SELCHANGE)
{
// Forcer le redessin du TabControl:
InvalidateRect(hTabCtrl,0,0);
// Obtenir l'index de l'onglet sélectionné:
int cursel=SendMessage(hTabCtrl,TCM_GETCURSEL,0,0);
// N'afficher que le Static correspondant à l'onglet sélectionné:
ShowWindow(hlistview,cursel==1);
 
return0;
}
break;
case WM_COMMAND:
wmId = LOWORD(wParam);
wmEvent = HIWORD(wParam);

// Analyse les sélections de menu*:
switch(wmId)
{
 
case ID_FICHIER_QUITTER:
EndDialog(hDlg,0);
break;
case ID_FICHIER_OUVRIR:
chargertableau (hDlg);
//permet de charger un tableau a partir d'un fichier
 
break;
case ID_OUTILS_TABLEAU:
listview (hlistview,hDlg);
//affiche la listview
break;
}
break;//break du switch
break;//break du WM_COMMAND
 
case WM_CLOSE:
//Fermer la boite de dialogue:
EndDialog(hDlg,0);
break;
 
}
return0;
 
}
 


Il faudrait pouvoir insérer la listview dans l'onglet 1 par exemple.


pour une fenêtre simple je déclare le HWND dans case WM_INITDIALOG puis
je fait un ShowWindow (HWND,cursel==1)(1 correspond l'onglet) dans case
WM_NOTIFY.


Merci

1 réponse

cs_Spunk62 Messages postés 12 Date d'inscription mardi 23 septembre 2008 Statut Membre Dernière intervention 15 mai 2010
11 juin 2009 à 23:28
Résolu !
0
Rejoignez-nous