Partage
  • Partager sur Facebook
  • Partager sur Twitter

Pb pour remplir une listbox

Sujet résolu
    29 septembre 2008 à 11:34:48

    Bonjour,

    Je développe actuellement un plugin pour 3dsMax, et j'aimerais rajouter dans mon interface une listbox, que je remplirais à terme avec les points de mon objet 3d. Pour l'instant, j'essaye de juste de la remplir avec une string, en vain :(

    J'ai déclaré ma listbox dans un .rc (peut-être que ma déclaration n'est pas bonne?) :
    LISTBOX IDC_LIST, 12, 205, 60, 10
    


    Et voici ma fonction qui doit normalement me remplir cette listbox :
    void FillListBox(HWND hwndDlg, MonObjet* m)
    {
    	HWND hwndListBox = GetDlgItem(hwndDlg, IDC_LIST) ;	
    	for(int i=0; i<numverts; i++)
    	{
    		SendMessage(hwndListBox, (UINT)LB_ADDSTRING, 0, (LPARAM)"test") ;
    	}
    	
    }
    


    En fait, j'ai déjà un problème d'affichage de ma listbox : dans mon interface, elle apparait sous forme d'un trait o_O
    Tandis que si je la déclare comme COMBOBOX, là je la vois. Mais bon, quelque soit la déclaration dans le .rc, elle reste désespérément vide...

    Merci pour votre aide,


    Darholm
    • Partager sur Facebook
    • Partager sur Twitter
    Zero since 2007
      29 septembre 2008 à 13:55:13

      C'est une FAQ Win32 depuis ... 1991 (!) et elle était même sortie sur les BBS en 87 pour Win 2.0.
      cf. les ngs pros api Win32
      fr.comp.os.ms-windows.programmation,
      comp.os.ms-windows.programmer.win32,
      ngs MS, etc...
      • Partager sur Facebook
      • Partager sur Twitter
        29 septembre 2008 à 15:03:34

        Heu je ne comprends pas trop ta réponse o_O
        J'ai le nez dans la doc windows depuis quelques jours déjà, si c'est ça que tu veux savoir :) Et si je vous fais part de mon soucis, c'est bien parce que malgré la doc msdn, je n'y arrive pas.

        Voilà où j'en suis actuellement :
        -déclaration dans mon .rc
        COMBOBOX IDC_LIST, 12, 215, 60, 10, CBS_DROPDOWNLIST|CBS_AUTOHSCROLL|WS_TABSTOP
        


        -fonction devant remplir la combobox
        void FillListBox(HWND hwndDlg, MonObjet* m)
        {
        	HWND hwndListBox = GetDlgItem(hwndDlg, IDC_LIST) ;
        	char *elem[]={"toto", "titi", "tata"} ;
        	for(int i=0; i<3; i++)
        	{
        
        		SendMessage(hwndListBox, CB_INSERTSTRING, (WPARAM)-1, (LPARAM)elem[i]) ;
        	}
        	
        }
        


        -appel de cette fonction
        BOOL MonObjetDlgProc::DlgProc(TimeValue t, IParamMap2 *map, HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam)
        {
               //ici hwnd est non-null
        	FillListBox(hwnd, mo) ;
        	
        	switch(msg)
        	{
        		case WM_INITDIALOG :
        			//ici hwnd est null		
        		break ;
        		case WM_COMMAND :
        			switch(LOWORD(wparam))
        			{
        				case IDC_ORIGINE :
                                               //ici hwnd est non-null
        					mo->pblock2->SetValue(MonObjet_posx,t, 0.0f) ;
        					mo->pblock2->SetValue(MonObjet_posy,t,0.0f) ;
        					mo->pblock2->SetValue(MonObjet_posz,t,0.0f) ;
        										
        				break ;
        				case IDC_DEFAULT :
        					mo->pblock2->SetValue(MonObjet_size,t,1.0f) ;
        					mo->pblock2->SetValue(MonObjet_length,t,1.0f) ;
        					mo->pblock2->SetValue(MonObjet_width,t,1.0f) ;
        					mo->pblock2->SetValue(MonObjet_height,t,1.0f) ;
        				break ;				
        			}
        		break ;
        	}
        	return FALSE ;
        }
        


        Merci,


        Darholm

        Edit : ok j'ai résolu mon problème : les dimensions que j'indiquais dans le .rc n'étaient pas assez grandes pour permettre l'affichage de la liste des éléments. Je croyais qu'elles indiquaient la dimension du widget, comme pour les autre control....c'était tout con, mais fallait le savoir!

        Voilà la solution :
        -déclaration dans le .rc
        COMBOBOX IDC_LIST, 12, 215, 90, 85, CBS_DROPDOWNLIST|CBS_AUTOHSCROLL|WS_TABSTOP
        


        -fonction de remplissage
        void FillListBox(HWND hwndDlg, MonObjet* m)
        {
        	HWND hwndListBox = GetDlgItem(hwndDlg, IDC_LIST) ;
        	//liste des elements de la combobox
        	char *elem[]={"toto", "titi", "tata", "tutu"} ;
        	for(int i=0; i<4; i++)
        	{
        		//on remplit la combobox
        		SendMessage(hwndListBox, CB_INSERTSTRING, (WPARAM)i, (LPARAM)elem[i]) ;
        	}
        	//on definit la selection par defaut : ici le premier element de la liste
        	SendMessage(hwndListBox, CB_SETCURSEL, (WPARAM)0, 0) ;
        }
        


        -appel de la fonction
        INT_PTR MonObjetDlgProc::DlgProc(TimeValue t, IParamMap2 *map, HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam)
        {
        	switch(msg)
        	{
        		case WM_INITDIALOG :
        			FillListBox(hwnd, mo) ;
        		break ;
        


        A adapter à vos besoins, évidement ^^
        • Partager sur Facebook
        • Partager sur Twitter
        Zero since 2007

        Pb pour remplir une listbox

        × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
        × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
        • Editeur
        • Markdown