Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1573 connectés 

 


 Mot :   Pseudo :  
 
 Page :   1  2
Page Suivante
Auteur Sujet :

[MFC ] [Resolu] clique sur CLIstCtrl

n°359171
VisualC++
J'va y penser ...
Posté le 11-04-2003 à 17:52:49  profilanswer
 

Reprise du message précédent :
La version ds une dialog avec recuperation du Click (reflect event de la liste)
 

Code :
  1. void CTestProjetDlg::OnClickList1(NMHDR* pNMHDR, LRESULT* pResult)
  2. {
  3. CListView* pList = (CListView*) GetDlgItem(IDC_LIST1);
  4. NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR;
  5. int index, column;
  6. if( ( index = m_fniHitTestEx( CPoint(pNMListView->ptAction), &column )) != -1 ) {
  7.  TRACE("Line %d / Sub Item %d selected\n", index, column);
  8. }
  9. *pResult = 0;
  10. }
  11. int CTestProjetDlg::m_fniHitTestEx(CPoint &point, int *col) const
  12. {
  13. CListView* pList = (CListView*) GetDlgItem(IDC_LIST1);
  14. int colnum = 0;
  15. int row = pList->GetListCtrl().HitTest( point, NULL );
  16. if( col ) *col = 0;
  17. if( (::GetWindowLong(pList->GetSafeHwnd(), GWL_STYLE) & LVS_TYPEMASK) != LVS_REPORT )
  18.   return row;
  19. row = pList->GetListCtrl().GetTopIndex();
  20. int bottom = row + pList->GetListCtrl().GetCountPerPage();
  21. if( bottom > pList->GetListCtrl().GetItemCount() )
  22.   bottom = pList->GetListCtrl().GetItemCount();
  23. CHeaderCtrl* pHeader = (CHeaderCtrl*)pList->GetDlgItem(0);
  24. int nColumnCount = pHeader->GetItemCount();
  25. for( ;row <=bottom;row++) {
  26.  CRect rect;
  27.  pList->GetListCtrl().GetItemRect( row, &rect, LVIR_BOUNDS );
  28.  if( rect.PtInRect(point) ) {
  29.   for( colnum = 0; colnum < nColumnCount; colnum++ ) {
  30.    int colwidth = pList->GetListCtrl().GetColumnWidth(colnum);
  31.    if( point.x >= rect.left && point.x <= (rect.left + colwidth ) ) {
  32.      if( col ) *col = colnum;
  33.      return row;
  34.    }
  35.    rect.left += colwidth;
  36.   }
  37.  }
  38. }
  39. return -1;
  40. }


 
Ca a pas besoin de l'extended style. Par contre bon 5 min le temsp de trouver une fonction HitTestEx qq part ds mes sources.
 
Edit: par contre si on utilise un CListCtrl a nous, on doit pourvoir utilsier les infos contenues ds le NMHDR* qui est passe sur le click, mais bon jsais pas si info remontee qqsoit la version des DLL utilisees.


Message édité par VisualC++ le 11-04-2003 à 17:55:00
mood
Publicité
Posté le 11-04-2003 à 17:52:49  profilanswer
 

n°359193
Konar
Posté le 11-04-2003 à 18:14:30  profilanswer
 

VisualC++ a écrit :


 
Ca a pas besoin de l'extended style. Par contre bon 5 min le temsp de trouver une fonction HitTestEx qq part ds mes sources.
 
Edit: par contre si on utilise un CListCtrl a nous, on doit pourvoir utilsier les infos contenues ds le NMHDR* qui est passe sur le click, mais bon jsais pas si info remontee qqsoit la version des DLL utilisees.


 
 :jap:  
pas mal en effet (j'ai pas testé, mais ca m'avait l'air tout bon, meme si les lignes de la listview ont pas les memes hauteurs)
 
Allez, deuxième challenge, le remplacement des styles LVS_EX_GRIDLINES et LVS_EX_UNDERLINECOLD a la main
(rien de mieux pour tester un minimum ses connaissances en ownerdraw)
 
Bon courage

n°359199
VisualC++
J'va y penser ...
Posté le 11-04-2003 à 18:23:49  profilanswer
 

Euh copie coller d un petit soft que j ai fait :lol:
 

Code :
  1. void CMyListCtrl::OnCustomdraw ( NMHDR* pNMHDR, LRESULT* pResult )
  2. {
  3. LPNMTVCUSTOMDRAW pCustomDraw = (LPNMTVCUSTOMDRAW)pNMHDR;
  4. static CRect rcItem;
  5. static BOOL bHot;
  6. *pResult = CDRF_DODEFAULT;
  7. switch (pCustomDraw->nmcd.dwDrawStage) {
  8. case CDDS_PREPAINT:
  9.  *pResult = CDRF_NOTIFYITEMDRAW;
  10.  break;
  11. case CDDS_ITEMPREPAINT:
  12.  bHot = FALSE;
  13.  if (pCustomDraw->nmcd.uItemState & CDIS_HOT) {
  14.   bHot = TRUE;
  15.  }
  16.  pCustomDraw->clrText = RGB(255,255,255);
  17.  pCustomDraw->clrTextBk = RGB(255,255,255);
  18.  pCustomDraw->nmcd.uItemState &= ~CDIS_FOCUS;
  19.  pCustomDraw->nmcd.uItemState &= ~CDIS_SELECTED;
  20.  GetItemRect((HTREEITEM) pCustomDraw->nmcd.dwItemSpec, &rcItem, TRUE);
  21.  *pResult = CDRF_NOTIFYPOSTPAINT;
  22.  break;
  23. case CDDS_ITEMPOSTPAINT:
  24.  DrawTreeItem(bHot, rcItem, pCustomDraw->nmcd.hdc, (HTREEITEM) pCustomDraw->nmcd.dwItemSpec);
  25.  break;
  26. }
  27. }
  28. void CMyListCtrl::DrawTreeItem(BOOL bHot, CRect rcItem, HDC hdc, HTREEITEM hItem)
  29. {
  30. RECT rcFocus = rcItem;
  31. RECT treerect;
  32. GetClientRect(&treerect);
  33. rcFocus.left = treerect.left + 2;
  34. rcFocus.right = treerect.right - 2;
  35. if(bHot == TRUE) {
  36.  TRIVERTEX        vert[2] ;
  37.  GRADIENT_RECT    gRect;
  38.  vert [0] .x      = rcFocus.left;
  39.  vert [0] .y      = rcFocus.top;
  40.  vert [0] .Red    = USHORT((m_dwRightColorSide & 0x000000ff) << 8);
  41.  vert [0] .Green  = USHORT(((m_dwRightColorSide & 0x0000ff00) >> 8) << 8);
  42.  vert [0] .Blue   = USHORT(((m_dwRightColorSide & 0x00ff0000) >> 16) << 8);
  43.  vert [0] .Alpha  = 0x0000;
  44.  vert [1] .x      = rcFocus.right;
  45.  vert [1] .y      = rcFocus.bottom;
  46.  vert [1] .Red    = USHORT((m_dwLeftColorSide & 0x000000ff) << 8);
  47.  vert [1] .Green  = USHORT(((m_dwLeftColorSide & 0x0000ff00) >> 8) << 8);
  48.  vert [1] .Blue   = USHORT(((m_dwLeftColorSide & 0x00ff0000) >> 16) << 8);
  49.  vert [1] .Alpha  = 0x0000;
  50.  gRect.UpperLeft  = 0;
  51.  gRect.LowerRight = 1;
  52.  ::GradientFill(hdc, vert, 2, &gRect, 1, GRADIENT_FILL_RECT_H);
  53.  ::SetTextColor(hdc, RGB(0,0,0));
  54. }
  55. else {
  56.  ::FillRect(hdc, &rcFocus, (HBRUSH)m_BackBrushDefault.m_hObject);
  57.  ::SetTextColor(hdc, RGB(30,30,30));
  58. }
  59. ::SetBkMode(hdc, TRANSPARENT);
  60. HICON hicon = m_fnhiGetCurrentIcon(hItem);
  61. if (hicon != NULL) {
  62.  BOOL bRet = DrawIconEx(hdc, rcItem.left - 16, rcItem.top + 2, hicon, 17, 17, 0, NULL, DI_NORMAL);
  63.  if (bRet == 0) {
  64.   TRACE("ret = %d\n", GetLastError());
  65.  }
  66.  DestroyIcon(hicon);
  67. }
  68. rcItem.left += 5;
  69. CString str = GetItemText(hItem);
  70. ::DrawText(hdc, str, -1, &rcItem, DT_VCENTER | DT_SINGLELINE);
  71. }


 
bon plus les autres fonctions mais bon ;)

n°359230
Konar
Posté le 11-04-2003 à 19:33:20  profilanswer
 

arf... un TreeView ownerdraw.
 
(mal)heureusement j'ai jms eu a en faire, mais au moins maintenant je sais ke ca se fait.

n°359270
polo021
Posté le 11-04-2003 à 20:53:22  profilanswer
 

juste une petite question pour Visualc++ : ca fait longtemps que tu fais de la prog en MFC?
Tu fais que ca?

n°359307
antsite
Je me souviens
Posté le 11-04-2003 à 22:07:00  profilanswer
 

polo021 a écrit :

juste une petite question pour Visualc++ : ca fait longtemps que tu fais de la prog en MFC?
Tu fais que ca?


 
Oui moi aussi je suis très impressioné!  :jap:

n°359357
VisualC++
J'va y penser ...
Posté le 11-04-2003 à 23:29:03  profilanswer
 

Euh ca fait 5 ans que je fait du MFC et non ca fait 15 ans que je fait de la prog et je fait pas que du MFC (C++, et apres Web surtout).
 
Edit enfin avant les MFC je faisait un peu de Win32 aussi lol


Message édité par VisualC++ le 11-04-2003 à 23:29:27
n°359359
VisualC++
J'va y penser ...
Posté le 11-04-2003 à 23:31:46  profilanswer
 

Konar a écrit :

arf... un TreeView ownerdraw.
 
(mal)heureusement j'ai jms eu a en faire, mais au moins maintenant je sais ke ca se fait.


 
OIn peut faire des trucs sympa avec oui :) La le bout de code c pour une liste d'un soft que j avais fait pour tester, un clone de Trillian qui peut se connecter a MSN et ICQ.

mood
Publicité
Posté le   profilanswer
 

 Page :   1  2
Page Suivante

Aller à :
Ajouter une réponse
 

Sujets relatifs
[C] récupérer un entier sur 2 octets dans un fichier [résolu][PHP] Retrieve de data par formulaire (resolu)
[resolu] CListCtrl.SortItems(...)Progress bars [MFC C++]
Probleme fichier + MFC[C] tableaux de pointeurs [Resolu]
[JAVA] jouer des .wav [Résolu !][REGEXP][RESOLU] Expression régulière pour un nom NetBIOS d'ordinateur
MFC appli qui planteRESOLU : lister le repertoire parent
Plus de sujets relatifs à : [MFC ] [Resolu] clique sur CLIstCtrl


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR