List View Sens D'ajout

Résolu
cs_Mamelook Messages postés 48 Date d'inscription jeudi 10 juillet 2003 Statut Membre Dernière intervention 27 juillet 2008 - 1 sept. 2007 à 16:36
racpp Messages postés 1909 Date d'inscription vendredi 18 juin 2004 Statut Modérateur Dernière intervention 14 novembre 2014 - 2 sept. 2007 à 12:33
Bonjour,
J'ai un petit probleme dans ma listview, c'est pas vraiment un probleme, plutot un détail.
Voici le code de ma ListView :

##############################################
/*Creation de la fenetre*/
HWND liste_mess = CreateWindowEx(WS_EX_CLIENTEDGE, "SysListView32", NULL,
LVS_REPORT|WS_CHILD|WS_VSCROLL|LVS_SINGLESEL|WS_VISIBLE,
-5, -20, taillex+10, tailley-30, hwnd, (HMENU)00001, hinst, NULL);
ListView_SetExtendedListViewStyleEx(liste_mess, 0, LVS_EX_FULLROWSELECT|LVS_EX_HEADERDRAGDROP);

/*Ajout des collone*/
LVCOLUMN lvc;
lvc.mask = LVCF_TEXT | LVCF_WIDTH;
lvc.cx = 10;
ListView_InsertColumn(liste_mess, 0, &lvc);
lvc.cx = 100;
lvc.pszText = "Pseudo";
ListView_InsertColumn(liste_mess, 1, &lvc);
lvc.cx = taillex-150;
lvc.pszText = "Message";
ListView_InsertColumn(liste_mess, 2, &lvc);

/*Ajout test*/
LVITEM lvItem = {0};

lvItem.mask = LVIF_TEXT;
lvItem.iItem = 0;
lvItem.iSubItem = 0;
lvItem.iImage = 0;

int itemPos = ListView_InsertItem(liste_mess,(LPARAM)&lvItem);
ListView_SetItemText(liste_mess,itemPos,0,"");
ListView_SetItemText(liste_mess,itemPos,1,"Pseudo");
ListView_SetItemText(liste_mess,itemPos,2,"Mess1");

itemPos = ListView_InsertItem(liste_mess,(LPARAM)&lvItem);
ListView_SetItemText(liste_mess,itemPos,0,"");
ListView_SetItemText(liste_mess,itemPos,1,"Pseudo");
ListView_SetItemText(liste_mess,itemPos,2,"Mess2");

itemPos = ListView_InsertItem(liste_mess,(LPARAM)&lvItem);
ListView_SetItemText(liste_mess,itemPos,0,"");
ListView_SetItemText(liste_mess,itemPos,1,"Pseudo");
ListView_SetItemText(liste_mess,itemPos,2,"Mess3");

itemPos = ListView_InsertItem(liste_mess,(LPARAM)&lvItem);
ListView_SetItemText(liste_mess,itemPos,0,"");
ListView_SetItemText(liste_mess,itemPos,1,"Pseudo");
ListView_SetItemText(liste_mess,itemPos,2,"Mess4");
##################################################

Ce code marche parfaitement, le seul probleme c'est l'ordre d'affichage des message qui est comme sa :
Mess4
Mess3
Mess2
Mess1

Comment faire pour que avec ce code (qui est senser être un t'chat dynamique) affiche le dernier message reçus en dernier ?

Donc dans notre exemple :
Mess1
Mess2
Mess3
Mess4

Merci de votre aide.

7 réponses

racpp Messages postés 1909 Date d'inscription vendredi 18 juin 2004 Statut Modérateur Dernière intervention 14 novembre 2014 17
1 sept. 2007 à 17:04
Salut,
C'est normal car le membre iItem de ta structure LVITEM est toujours à 0. C'est à cette position (1ère) que seront ajoutés tous les éléments. Pour qu'ils soient ajoutés à la fin il faut que ce membre soit égal ou supérieur au nombre total des éléments contenus dans la listview. Pour obtenir le nombre des éléments tu peux utiliser la macro ListView_GetItemCount(). La valeur retournée sera donnée au membre iItem.
3
racpp Messages postés 1909 Date d'inscription vendredi 18 juin 2004 Statut Modérateur Dernière intervention 14 novembre 2014 17
1 sept. 2007 à 17:56
Utilise la macro  ListView_EnsureVisible():

ListView_EnsureVisible(hListView, item, 0);<link href="../../../css/ie4.css" type="text/css" rel="stylesheet" /><!-- @ --><link href="../../../css/inetsdk.css" type="text/css" rel="stylesheet" /><!-- @ --><style type="text/css"><![CDATA[
PRE.clsCode { font-size:110%; }
PRE.clsSyntax { font-size:100%; }
TD DIV.clsBeta { display:none;}

A:link { color:#0000ff; text-decoration:underline;}
A:visited { color:#0000ff; text-decoration:underline;}
A:hover { color:#3366ff; text-decoration:underline;}
MSHelp\:link {
color:#0000ff;
text-decoration:underline;
cursor:hand;
hoverColor:#3366ff;
filterString: ;}
]]></style><link href="ms-help://Hx/HxRuntime/HxLink.css" type="text/css" rel="stylesheet" />

<xml id="_topicdata" pagetype="macro" proj="platsdk" name="ListView_EnsureVisible" pubpath="/platform/commctls/listview/macros/listview_ensurevisible.htm"><!-- topic data --><root></root></xml>

<xml xmlns=""><mshelp:keyword index="A" term="_win32_ListView_EnsureVisible"></mshelp:keyword><mshelp:keyword index="A" term="_win32_ListView_EnsureVisible_cpp"></mshelp:keyword><mshelp:toctitle title="ListView_EnsureVisible Macro"></mshelp:toctitle><mshelp:rltitle title="ListView_EnsureVisible Macro ()"></mshelp:rltitle><mshelp:keyword index="F" term="ListView_EnsureVisible"></mshelp:keyword><mshelp:keyword index="K" term="ListView_EnsureVisible"></mshelp:keyword><mshelp:attr name="TopicType" value="kbRef"></mshelp:attr><mshelp:attr name="Locale" value="kbEnglish"></mshelp:attr><mshelp:attr name="DevLang" value="C++"></mshelp:attr><mshelp:attr name="Technology" value="Controls"></mshelp:attr><mshelp:attr name="TechnologyVers" value="kbControls"></mshelp:attr><mshelp:attr name="DocSet" value="WCSDK"></mshelp:attr><mshelp:attr name="DocSet" value="LHSDK"></mshelp:attr><mshelp:attr name="DocSet" value="PSDK"></mshelp:attr><mshelp:attr name="TargetOS" value="Windows"></mshelp:attr><mshelp:attr name="TopicType" value="apiref"></mshelp:attr><mshelp:attr name="APIName" value="ListView_EnsureVisible"></mshelp:attr><mshelp:attr name="APIType" value="HeaderDef"></mshelp:attr><mshelp:attr name="APILocation" value="commctrl.h"></mshelp:attr><mshelp:attr name="TopicType" value="macro"></mshelp:attr></xml>
3
cs_Mamelook Messages postés 48 Date d'inscription jeudi 10 juillet 2003 Statut Membre Dernière intervention 27 juillet 2008
1 sept. 2007 à 17:33
Merci beaucoup, tout fonctionne correctement maintenant.

J'aurai une autre question :
Comment on fait pour que le dernier message soit toujour visible, je m'explique : Si on a beaucoup de message, les nouveau message aparaitron tout en bas et donc ne seront pas visible car il faudra que l'utilisateur utilise la scrollbar.
Ma question est donc comment mettre l'utilisateur au niveau le plus bas (sans qu'il utilise la scrollbar) ?

Merci de votre aide.
0
cs_Mamelook Messages postés 48 Date d'inscription jeudi 10 juillet 2003 Statut Membre Dernière intervention 27 juillet 2008
1 sept. 2007 à 18:05
Genial, merci infiniment !
++
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_Mamelook Messages postés 48 Date d'inscription jeudi 10 juillet 2003 Statut Membre Dernière intervention 27 juillet 2008
1 sept. 2007 à 18:14
Tient au passage (question hors sujet), comment on fait pour qu'un control edit renvoi un WM_COMMAND quend on appui sur la touche entrée ?
Pour envoyer le message sans appyuer sur le bouton envoyer.

####
HWND reponse = CreateWindowEx(0, "edit", "", WS_CHILD|WS_VISIBLE, 0, tailley-50, taillex, 50, hwnd, NULL, hinst, NULL);
0
cs_juju12 Messages postés 966 Date d'inscription samedi 3 avril 2004 Statut Membre Dernière intervention 4 mars 2010 4
1 sept. 2007 à 18:52
Si tu crées ton Edit dans un DialogBox (en SingleLine), le fait d'appuyer sur Entrée simule automatiquement un click sur le bouton par défaut (par ex. Envoyer).
0
racpp Messages postés 1909 Date d'inscription vendredi 18 juin 2004 Statut Modérateur Dernière intervention 14 novembre 2014 17
2 sept. 2007 à 12:33
Ton bouton doit avoir le style BS_DEFPUSHBUTTON et l'identificateur IDOK:
hEnvoyer=CreateWindowEx(0,"BUTTON","Envoyer", WS_VISIBLE | WS_CHILD | BS_DEFPUSHBUTTON,100,100,60,20,hDlg,(HMENU)IDOK,0,0);
hEnvoyer est le HWND du bouton et hDlg le HWND de la boite de dialogue mère. Si c'est une fenêtre la boucle des messages doit ressembler à ceci:
MSG Msg;
while (GetMessage(&Msg, 0, 0, 0))
{
    if (!IsDialogMessage(hwnd, &Msg))
    {
        TranslateMessage(&Msg);
        DispatchMessage(&Msg);
    }
}

Ainsi, tout appui sur la touche Entrée engendre un WM_COMMAND correspondant au bouton Envoyer.
0
Rejoignez-nous