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

 


Dernière réponse
Sujet : c/c++ et les processus
weblook$ A ma connaissance tu n'a guere le choix,une telle boite n'existe pas en 'préfabriqué'.Par contre à l'aide des MFC sa réalisation n'est pas trés compliqué:
 
pour l'arbre classe CTreeCtrl (Tree Ctrl
pour la liste CListCtrl (List Ctrl)(clic droit option view->report)ou ListBox si tu ne veux qu'une seul colonne
 
ci join un code d'exemple que tu utilisera pour initialisé ta boite (Ds la fonction OnInitDialog avec AppWizard)
 
 
m_liste.InsertColumn(0,"Appareil",LVCFMT_LEFT,70
);
m_liste.InsertColumn(1,"Opt1",LVCFMT_LEFT,50);
m_liste.InsertColumn(2,"Opt2",LVCFMT_LEFT,50);
m_liste.InsertColumn(3,"Date",LVCFMT_RIGHT,80);
 
 
 
 
 
 hTree=m_tree.InsertItem("K1TP",0,1);    
 hTree=m_tree.InsertItem("T",0,1,hTree);
 m_tree.InsertItem("10",0,1,hTree);
 m_tree.InsertItem("100",0,1,hTree);
m_tree.Expand(hTree,TVE_EXPAND);
 hTree=m_tree.GetParentItem(hTree);
 hTree=m_tree.InsertItem("P",hTree);
 m_tree.InsertItem("1",0,1,hTree);
 m_tree.InsertItem("10",0,1,hTree);
m_tree.Expand(hTree,TVE_EXPAND);
 hTree=m_tree.InsertItem("K2TP",0,1);        //K2TP
 hTree=m_tree.InsertItem("T",0,1,hTree);
m_tree.Expand(hTree,TVE_EXPAND);
 m_tree.InsertItem("1",0,1,hTree);
 m_tree.InsertItem("10",0,1,hTree);
 m_tree.InsertItem("100",0,1,hTree);
m_tree.Expand(hTree,TVE_EXPAND);
m_tree.Expand(m_tree.GetRootItem(),TVE_EXPAND);
 
 
Voilà avec ça tu as déjà un bel arbre et une liste comportant 4 colonnes
 
 
 
Quand tu cliqueras sur l'arbre cela appellera la fonction OnSelChangeTree (c'est un message dans AppWizard)
 
voilà à quoi ça resemble:
void mesure::OnSelchangedTree(NMHDR* pNMHDR, LRESULT* pResult)  
{
 NM_TREEVIEW* pNMTreeView = (NM_TREEVIEW*)pNMHDR;
 // TODO: Add your control notification handler code here
 POSITION pos;
  CString s;
 CStringList stringList1;
 int j=0,i=0;
 COleDateTime temp1,temp2;
 
 
 
 hTree=m_tree.GetSelectedItem();
 j=m_liste.InsertItem(m_liste.GetItemCount(),"" );
 
 do
 {  
  s=m_tree.GetItemText(hTree);    
  stringList1.AddHead(s);
  hTree=m_tree.GetParentItem(hTree);
 }
 while(hTree!=0);
   
 pos=stringList1.GetHeadPosition();    //pos initialis n tete de liste
 while(pos){          //tant que pos!=0 : fin de liste
   s=stringList1.GetNext(pos);
   m_liste.SetItemText(j,i++,s);
   }
 
 m_time.GetTime(temp1);
 m_dat.GetTime(temp2);      s=temp2.Format("%d/%m " )  +  temp1.Format("- %Hh%M" );  
 m_liste.SetItemText(j,3,s);
 
 stringList.RemoveAll();    
for(int l=3;l>=0;l--){
 if((m_liste.GetItemText(m_liste.GetItemCount()-1,
l))!="" )  
stringList.AddHead(m_liste.GetItemText(m_liste.Get
ItemCount()-1,l));
 }
 
 *pResult = 0;
}
 
 
Ainsi quand tu cliquera sur sur un élément de l'arbre cela ajoutera le nom de l'élément cliquer dans une stringlist sorte de vector mais défini dans les MFC,tu pourra de cette manière en parcourant cette stringlist ajouter les éléments sélectionnés dans ta Liste Ctrl (ou si tu n'a pas besoin de plusieurs colonnes dans une ListBox(méthode AddString("ta chaine" );) ou pour la ListeCtrl InsertItem(...)
 
C'est un peu donné en vrac mais....faudra faire avec  ;)  
Non je plaisante, si t'as le moindre pbm n'hésite pas...
@+

Votre réponse
Nom d'utilisateur    Pour poster, vous devez être inscrit sur ce forum .... si ce n'est pas le cas, cliquez ici !
Le ton de votre message                        
                       
Votre réponse


[b][i][u][strike][spoiler][fixed][cpp][url][email][img][*]   
 
   [quote]
 

Options

 
Vous avez perdu votre mot de passe ?


Vue Rapide de la discussion
weblook$ A ma connaissance tu n'a guere le choix,une telle boite n'existe pas en 'préfabriqué'.Par contre à l'aide des MFC sa réalisation n'est pas trés compliqué:
 
pour l'arbre classe CTreeCtrl (Tree Ctrl
pour la liste CListCtrl (List Ctrl)(clic droit option view->report)ou ListBox si tu ne veux qu'une seul colonne
 
ci join un code d'exemple que tu utilisera pour initialisé ta boite (Ds la fonction OnInitDialog avec AppWizard)
 
 
m_liste.InsertColumn(0,"Appareil",LVCFMT_LEFT,70
);
m_liste.InsertColumn(1,"Opt1",LVCFMT_LEFT,50);
m_liste.InsertColumn(2,"Opt2",LVCFMT_LEFT,50);
m_liste.InsertColumn(3,"Date",LVCFMT_RIGHT,80);
 
 
 
 
 
 hTree=m_tree.InsertItem("K1TP",0,1);    
 hTree=m_tree.InsertItem("T",0,1,hTree);
 m_tree.InsertItem("10",0,1,hTree);
 m_tree.InsertItem("100",0,1,hTree);
m_tree.Expand(hTree,TVE_EXPAND);
 hTree=m_tree.GetParentItem(hTree);
 hTree=m_tree.InsertItem("P",hTree);
 m_tree.InsertItem("1",0,1,hTree);
 m_tree.InsertItem("10",0,1,hTree);
m_tree.Expand(hTree,TVE_EXPAND);
 hTree=m_tree.InsertItem("K2TP",0,1);        //K2TP
 hTree=m_tree.InsertItem("T",0,1,hTree);
m_tree.Expand(hTree,TVE_EXPAND);
 m_tree.InsertItem("1",0,1,hTree);
 m_tree.InsertItem("10",0,1,hTree);
 m_tree.InsertItem("100",0,1,hTree);
m_tree.Expand(hTree,TVE_EXPAND);
m_tree.Expand(m_tree.GetRootItem(),TVE_EXPAND);
 
 
Voilà avec ça tu as déjà un bel arbre et une liste comportant 4 colonnes
 
 
 
Quand tu cliqueras sur l'arbre cela appellera la fonction OnSelChangeTree (c'est un message dans AppWizard)
 
voilà à quoi ça resemble:
void mesure::OnSelchangedTree(NMHDR* pNMHDR, LRESULT* pResult)  
{
 NM_TREEVIEW* pNMTreeView = (NM_TREEVIEW*)pNMHDR;
 // TODO: Add your control notification handler code here
 POSITION pos;
  CString s;
 CStringList stringList1;
 int j=0,i=0;
 COleDateTime temp1,temp2;
 
 
 
 hTree=m_tree.GetSelectedItem();
 j=m_liste.InsertItem(m_liste.GetItemCount(),"" );
 
 do
 {  
  s=m_tree.GetItemText(hTree);    
  stringList1.AddHead(s);
  hTree=m_tree.GetParentItem(hTree);
 }
 while(hTree!=0);
   
 pos=stringList1.GetHeadPosition();    //pos initialis n tete de liste
 while(pos){          //tant que pos!=0 : fin de liste
   s=stringList1.GetNext(pos);
   m_liste.SetItemText(j,i++,s);
   }
 
 m_time.GetTime(temp1);
 m_dat.GetTime(temp2);      s=temp2.Format("%d/%m " )  +  temp1.Format("- %Hh%M" );  
 m_liste.SetItemText(j,3,s);
 
 stringList.RemoveAll();    
for(int l=3;l>=0;l--){
 if((m_liste.GetItemText(m_liste.GetItemCount()-1,
l))!="" )  
stringList.AddHead(m_liste.GetItemText(m_liste.Get
ItemCount()-1,l));
 }
 
 *pResult = 0;
}
 
 
Ainsi quand tu cliquera sur sur un élément de l'arbre cela ajoutera le nom de l'élément cliquer dans une stringlist sorte de vector mais défini dans les MFC,tu pourra de cette manière en parcourant cette stringlist ajouter les éléments sélectionnés dans ta Liste Ctrl (ou si tu n'a pas besoin de plusieurs colonnes dans une ListBox(méthode AddString("ta chaine" );) ou pour la ListeCtrl InsertItem(...)
 
C'est un peu donné en vrac mais....faudra faire avec  ;)  
Non je plaisante, si t'as le moindre pbm n'hésite pas...
@+
Ttienne Je t'en prie ! :jap:
 
Tu n'aurais pas un idée pour mon problème de multisélection de fichiers et repertoires ( topic [VC6.0].... from Ttienne) ?
 
:jap:
weblook$ Du grand art,c'est du tout bon...Merci beaucoup :love:
weblook$ Ok je fais les essais et je te tiens au courant
Merci te ton aide
Ttienne Faut utiliser CreateProcess
 
Genre :

Code :
  1. if( !CreateProcess( EXEPATH, NULL, NULL, NULL, TRUE, IDLE_PRIORITY_CLASS, NULL, EXEDIR, &StartupInfo, &pi ) )
  2. {
  3. char msg[100];
  4. // traitement erreur
  5. }


 
Après si tu veux vraiment attendre la fin du process fils, tu
fait un :

Code :
  1. WaitForSingleObject( pi.hProcess, INFINITE );

 

[edtdd]--Message édité par Ttienne--[/edtdd]

weblook$ je code actuellement un gestionnaire d'application et je voudrais que toute les applications qui sont lancées tournent en meme temp (Et non que une se termine,et q'une 2eme se lance etc...)
quelle difference fondamentale y a t-il entre:

  • system(...)
  • CreateProcess(..)
  • _spawn(..)

Sachant que toutes les 3 servent à creer un nouveau processus?
 
Avec system(..), il faut attendre la fin d'une appli pour q'une deuxieme se lance et c'est justement ce que je ne veux pas!!
 
Please help :??:


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