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