begin process at 2012 05 29 07:47:32
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Archive C/C++

 > 

Archives

 > 

API

 > 

ListView édition pb


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

ListView édition pb

lundi 18 avril 2005 à 19:43:32 | ListView édition pb

victorcoasne

Membre Club
Bonjour,

J'ai une ListView et quand je met le style LVS_EDITLABELS je peux éditer ce champs !

Seulement voilà j'ai une ListView avec LVS_REPORT comme style et l'édition ne peut se faire que sur la première colone et non les autres !

Je voudrais donc savoir comment pouvoir éditer tous les champs (toutes les colones) alors que je suis en style LVS_REPORT.

Merci,

Le créateur du site http://victorlogiciels.com
mardi 19 avril 2005 à 09:04:49 | Re : ListView édition pb

ymca2003

Si je me souviens bien c'est pas possible directement, il faut sous-classer la list-view, détecter le clic souris, récupérer le rectangle de l'item à cet endroit ainsi que l'indice de l'item (pas simple selon mes souvenirs), créer un Edit et lui donner le focus. Détruire cet Edit lors de la perte du focus, appui sur Entrer ou Echap (après avoir sauvegarder le contenu) et affecter le résultat à l'item.

J'avais fait un truc du genre il y a pas mal de temps, je pourrais sans doute le retrouver.

Si quelqu'un a plus simple, je suis également preneur...
mardi 19 avril 2005 à 18:30:15 | Re : ListView édition pb

victorcoasne

Membre Club
Bonjour,

Ok ça m'interesse qd même !

Merci,

Le créateur du site http://victorlogiciels.com
vendredi 22 avril 2005 à 19:19:45 | Re : ListView édition pb

ymca2003

Réponse acceptée !

EditListView.cpp :

//***************************************************************************************
//***************************************************************************************

#include <windows.h>
#include <commctrl.h>

#include "Resource.h"

//=======================================================================================
//=======================================================================================
#define COLUMN_COUNT 5
#define LINE_COUNT  50

//=======================================================================================
//=======================================================================================
HINSTANCE g_hAppInstance = NULL;
HWND  g_hDlgMain  = NULL;
HWND  g_hListView  = NULL;

WNDPROC  g_pfnOldListViewProc = NULL;
HWND  g_hListViewEdit   = NULL;
LVITEM  g_lviListViewEdit  = {0};

//=======================================================================================
//=======================================================================================
int CALLBACK DlgProc(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam);
void OnInitDialog();
void OnCommand(UINT nIdCtrl, UINT nNotifyCode, HWND hCtrl);

LRESULT CALLBACK ListViewProc(HWND hCtrl, UINT uMsg, WPARAM wParam, LPARAM lParam);
void OnListViewLButtonDown(UINT nFlags, short x, short y);
void UpdateEditItemData();

//***************************************************************************************
//***************************************************************************************
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpszCmdLine, int nCmdShow)
{
 g_hAppInstance = hInstance;
 INITCOMMONCONTROLSEX iccex = {0};
 iccex.dwSize = sizeof(INITCOMMONCONTROLSEX);
 iccex.dwICC = ICC_LISTVIEW_CLASSES;
 InitCommonControlsEx(&iccex);
 DialogBox(g_hAppInstance, MAKEINTRESOURCE(IDD_MAIN), NULL, DlgProc);
 return 0;
}

//***************************************************************************************
//***************************************************************************************
int CALLBACK DlgProc(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
 switch(uMsg)
 {
  case WM_INITDIALOG :
   g_hDlgMain = hDlg;
   OnInitDialog();
   return 0;
  case WM_COMMAND :
   OnCommand(LOWORD(wParam), HIWORD(wParam), (HWND)lParam);
   return 0;
 }
 return 0;
}

//***************************************************************************************
//***************************************************************************************
void OnInitDialog()
{
 // récupération ListView, modification de sa WndProc
 g_hListView = GetDlgItem(g_hDlgMain, IDC_LISTVIEW);
 g_pfnOldListViewProc = (WNDPROC)SetWindowLong(g_hListView, GWL_WNDPROC, (LONG)ListViewProc);

 int nColumn, nLine;
 char szText[32];

 // ajout de colonnes
 LVCOLUMN lvc = {0};
 lvc.mask = LVCF_FMT|LVCF_WIDTH|LVCF_TEXT|LVCF_SUBITEM;
 lvc.fmt = LVCFMT_LEFT;
 lvc.cx = 80;
 lvc.pszText = szText;
 for(nColumn = 0; nColumn < COLUMN_COUNT; nColumn++)
 {
  wsprintf(szText, "Column %d", nColumn+1);
  SendMessage(g_hListView, LVM_INSERTCOLUMN, nColumn, (LPARAM)&lvc);
 }

 // ajout de lignes
 LVITEM lvi = {0};
 lvi.mask = LVIF_TEXT;
 lvi.pszText = szText;
 for(nLine = 0; nLine < LINE_COUNT; nLine++)
 {
  for(nColumn = 0; nColumn < COLUMN_COUNT; nColumn++)
  {
   // ajout item
   lvi.iItem = nLine;
   lvi.iSubItem = nColumn;
   wsprintf(szText, "Item %d %d", nLine+1, nColumn+1);
   if(nColumn == 0)
    SendMessage(g_hListView, LVM_INSERTITEM, 0, (LPARAM)&lvi);
   else
    SendMessage(g_hListView, LVM_SETITEM, 0, (LPARAM)&lvi);
  }
 }
}

//***************************************************************************************
//***************************************************************************************
void OnCommand(UINT nIdCtrl, UINT nNotifyCode, HWND hCtrl)
{
 switch(nIdCtrl)
 {
  case IDOK :
   EndDialog(g_hDlgMain, IDOK);
   return;
  case IDCANCEL :
   EndDialog(g_hDlgMain, IDCANCEL);
   return;
 }
}

//***************************************************************************************
//***************************************************************************************
LRESULT CALLBACK ListViewProc(HWND hCtrl, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
 switch(uMsg)
 {
  // mise à jour de l'Edit ou début d'un nouvel Edit
  case WM_LBUTTONDOWN :
   if(g_hListViewEdit != NULL)
    UpdateEditItemData();
   else
    OnListViewLButtonDown(wParam, LOWORD(lParam), HIWORD(lParam));
   break;

  // mise à jour de l'Edit
  case WM_HSCROLL : // no break
  case WM_VSCROLL :
   if(g_hListViewEdit != NULL)
    UpdateEditItemData();
   break;
 }

 // traitement par défaut
 return CallWindowProc(g_pfnOldListViewProc, hCtrl, uMsg, wParam, lParam);
}

//***************************************************************************************
//***************************************************************************************
void OnListViewLButtonDown(UINT nFlags, short x, short y)
{
 // nombre d'items au total
 int nTotalCount = SendMessage(g_hListView, LVM_GETITEMCOUNT, 0, 0);

 // premier item visible
 int nFirstVisible = SendMessage(g_hListView, LVM_GETTOPINDEX, 0, 0);
 
 // nombre d'items visibles
 int nVisibleCount = SendMessage(g_hListView, LVM_GETCOUNTPERPAGE, 0, 0); 
 if(nVisibleCount + nFirstVisible > nTotalCount)
  nVisibleCount = nTotalCount - nFirstVisible;
 
 // on recherche sur qu'elle ligne se trouve la souris
 for(int nLine = nFirstVisible; nLine < nFirstVisible+nVisibleCount; nLine++)
 {
  // rectangle entourrant la ligne à tester
  RECT rcLine;
  rcLine.left = LVIR_BOUNDS;
  SendMessage(g_hListView, LVM_GETITEMRECT, nLine, (LPARAM)&rcLine);
  
  // si la souris n'est pas dans ce rectangle, on continue
  POINT pt = {x, y};
  if(!PtInRect(&rcLine, pt))
   continue;
  
  // on sélectionne l'item correspondant
  LVITEM lvi = {0};
  lvi.mask = LVIF_STATE;
  lvi.state = LVIS_SELECTED|LVIS_FOCUSED;
  lvi.stateMask = LVIS_SELECTED|LVIS_FOCUSED;
  lvi.iItem = nLine;
  lvi.iSubItem = 0;
  SendMessage(g_hListView, LVM_SETITEM, 0, (LPARAM)&lvi);

  // recherche du numéro de la colonne ou se trouve la souris
  int x0 = 0;
  int nColumn = 0;
  int nColumnWidth;
  while(nColumn < COLUMN_COUNT)
  {
   nColumnWidth = SendMessage(g_hListView, LVM_GETCOLUMNWIDTH, nColumn, 0);
   if(x >= x0 && (x < x0+nColumnWidth))
    break;
   x0 += nColumnWidth;
   nColumn++;
  }
     
  // récupération de l'item associé
  char szText[256];
  memset(&g_lviListViewEdit, 0, sizeof(LVITEM));
  g_lviListViewEdit.mask = LVIF_TEXT;
  g_lviListViewEdit.iItem = nLine;
  g_lviListViewEdit.iSubItem = nColumn;
  g_lviListViewEdit.pszText = szText;
  g_lviListViewEdit.cchTextMax = 256;
  SendMessage(g_hListView, LVM_GETITEM, 0, (LPARAM)&g_lviListViewEdit);

  // création d'une zone d'édition
  g_hListViewEdit = CreateWindowEx(0, "EDIT", "", WS_BORDER|WS_VISIBLE|WS_CHILD,
    x0, rcLine.top, nColumnWidth, rcLine.bottom- rcLine.top,
    g_hListView, NULL, g_hAppInstance, NULL);
   
  // changement de la police de caractères
  HFONT hFont = (HFONT)GetStockObject(DEFAULT_GUI_FONT);
  SendMessage(g_hListViewEdit, WM_SETFONT, (WPARAM)hFont, TRUE);

  // on affiche le texte, on le sélectionne et on donne le focus
  SetFocus(g_hListViewEdit);
  SetWindowText(g_hListViewEdit, szText);
  SendMessage(g_hListViewEdit, EM_SETSEL, 0, -1);
 }
}

//***************************************************************************************
//***************************************************************************************
void UpdateEditItemData()
{
 // récupération du texte rentré dans la zone d'édition
 char szText[256];
 GetWindowText(g_hListViewEdit, szText, 256);
 
 // affectation
 g_lviListViewEdit.pszText = szText;
 SendMessage(g_hListView, LVM_SETITEM, 0, (LPARAM)&g_lviListViewEdit);
 
 // destruction de la zone d'édition
 DestroyWindow(g_hListViewEdit);
 g_hListViewEdit = NULL;
 
 // on redessine la liste
 InvalidateRect(g_hListView, NULL, FALSE);
 UpdateWindow(g_hListView);
}

EditListView.rc :

//Microsoft Developer Studio generated resource script.
//
#include "Resource.h"

#define APSTUDIO_READONLY_SYMBOLS
/////////////////////////////////////////////////////////////////////////////
//
// Generated from the TEXTINCLUDE 2 resource.
//
#include "winresrc.h"

/////////////////////////////////////////////////////////////////////////////
#undef APSTUDIO_READONLY_SYMBOLS

/////////////////////////////////////////////////////////////////////////////
// French (France) resources

#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_FRA)
#ifdef _WIN32
LANGUAGE LANG_FRENCH, SUBLANG_FRENCH
#pragma code_page(1252)
#endif //_WIN32

#ifdef APSTUDIO_INVOKED
/////////////////////////////////////////////////////////////////////////////
//
// TEXTINCLUDE
//

1 TEXTINCLUDE DISCARDABLE
BEGIN
    "Resource.h\0"
END

2 TEXTINCLUDE DISCARDABLE
BEGIN
    "#include ""winresrc.h""\r\n"
    "\0"
END

3 TEXTINCLUDE DISCARDABLE
BEGIN
    "\r\n"
    "\0"
END

#endif    // APSTUDIO_INVOKED


/////////////////////////////////////////////////////////////////////////////
//
// Dialog
//

IDD_MAIN DIALOG DISCARDABLE  0, 0, 330, 230
STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "Dialog"
FONT 8, "MS Sans Serif"
BEGIN
    CONTROL         "ListView",IDC_LISTVIEW,"SysListView32",LVS_REPORT |
                    LVS_SINGLESEL | WS_BORDER | WS_TABSTOP,10,10,310,210
END


/////////////////////////////////////////////////////////////////////////////
//
// DESIGNINFO
//

#ifdef APSTUDIO_INVOKED
GUIDELINES DESIGNINFO DISCARDABLE
BEGIN
    IDD_MAIN, DIALOG
    BEGIN
        LEFTMARGIN, 7
        RIGHTMARGIN, 323
        TOPMARGIN, 7
        BOTTOMMARGIN, 223
    END
END
#endif    // APSTUDIO_INVOKED

#endif    // French (France) resources
/////////////////////////////////////////////////////////////////////////////

 

#ifndef APSTUDIO_INVOKED
/////////////////////////////////////////////////////////////////////////////
//
// Generated from the TEXTINCLUDE 3 resource.
//


/////////////////////////////////////////////////////////////////////////////
#endif    // not APSTUDIO_INVOKED

Resource.h

//{{NO_DEPENDENCIES}}
// Microsoft Developer Studio generated include file.
// Used by EditListView.rc
//
#define IDD_MAIN                        101
#define IDC_LISTVIEW                    1000

// Next default values for new objects
//
#ifdef APSTUDIO_INVOKED
#ifndef APSTUDIO_READONLY_SYMBOLS
#define _APS_NEXT_RESOURCE_VALUE        102
#define _APS_NEXT_COMMAND_VALUE         40001
#define _APS_NEXT_CONTROL_VALUE         1001
#define _APS_NEXT_SYMED_VALUE           101
#endif
#endif

vendredi 22 avril 2005 à 23:40:10 | Re : ListView édition pb

victorcoasne

Membre Club
Bonjour,

C'est ce que je cherchais donc je vais voir ce que je peux faire avec !

Encore merci,

Le créateur du site http://victorlogiciels.com


Cette discussion est classée dans : pb, style, listview, édition, lvs


Répondre à ce message

Sujets en rapport avec ce message

ListView (2) [ par AlexMAN ] Bonjour, Jme suis penché sur le pb ke j'ai recontré recemment (voir sujet "ListView"), et j'ai eu l'illumination de compiler en mode debug (il men a f ListView [ par ncoder ] Bonjour à tous !Je fais un programme avec une listview à 5 colonnes, dont la dernière est une progressbar.Pour gérer tout ça, j'ai utilisé le style LV petit probleme de listview [ par LaTatadu91 ] bonjour,voila j'ai récupérer un petit bout de code sur les listviewpour initialiser un tableau:    LV_COLUMN lvColumn; //descripteur de colonne    lvC pb de delete [ par NADA114 ] bonjour,j'utilise Microsoft Visual Studio .Net 2003 (C++)voici mon pb je dois faire une lib en réutilisant un code dont les structures sont définies d pb de scrolling avec CRichEditView [ par hdaniel ] Bonjour, J'ai dévelloppe un programme avec un éditeur. J'ai utilise une SDI dérivé de CRichEditView. je dois éditer plusieurs lignes de grandes tai pb combobox sur windows mobile [ par mat74 ] bonjour à tous, je suis actuellement en stage de fin de DUT, et je dois réaliser une appli pour une Pocket PC équipé de Windows Mobile. Je programme e Pb de Syntaxe XML [ par Ticachey ] Bonjour tout le monde ! Je dois rédiger une structure XML permettant de renvoyer sous ce format les résultats obtenus sous Php de diverses fonctions s Message double click ds listview [ par deck_bsd ] Yop à tous,Voila je voudrait savoir quel message est envoyé par windows lorsque je double click sur un item de ma listview. J'ai fait tout les LVN_... Pb avec un menu [ par myckie ] Bonjour voila je vous expliques mon problème, j'ai programme qui contient une authentification suivant cette authentification je grise ou dégrise les pb tm redefinition [ par Kyb ] Bonjour, je cherche ¨¤ creer un server web sous winCE et voici l'erreur  que j'obtient   en compilant sous Visual Studio:Erreur 1 error C2011: 'tm' :


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,515 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales