Dropdown Menü speichert nur 1 Eintrag



  • Hallo zusammen,
    Ich bin gerade dabei einen Konverter für 3ds in ein eigenes Dateiformat zu
    schreiben. Da ich bis jetzt nur mit DirectX gearbeitet habe hab ich von
    Windows-Oberflächen nicht so viel Ahnung. Ich habe mir mit ResEdit einen
    Dialog gebaut und starte diesen über DoDialog. Wenn ich aber nun mit

    SendDlgItemMessage(hWnd, IDC_COMBO1, CB_ADDSTRING,0,(LPARAM) name);
    

    Die 3DS Effekt-Namen in die Liste eintragen will, wird nur der erste
    eingetragene String sichtbar. Die folgenden tauchen nicht in der Liste auf.
    Woran könnte das liegen?

    Der Resourcen-Code

    IDD_DIALOG1 DIALOGEX 0, 0, 632, 399
    STYLE DS_3DLOOK | DS_CENTER | DS_MODALFRAME | DS_SHELLFONT | WS_CAPTION | WS_VISIBLE | WS_POPUP | WS_SYSMENU
    CAPTION "Dialog"
    MENU IDR_MENU1
    FONT 8, "Ms Shell Dlg"
    BEGIN
        CONTROL         "Rich Edit", IDC_RICHEDIT1, RICHEDIT_CLASSA, WS_TABSTOP | WS_BORDER | ES_AUTOHSCROLL | ES_MULTILINE | ES_WANTRETURN | WS_VSCROLL | WS_HSCROLL , 6, 46, 502, 347
        DEFPUSHBUTTON   "Effekt-Dokument Laden", IDC_BUTTON1, 519, 68, 92, 14
        PUSHBUTTON      "Effekt-Dokument Speichern", IDC_BUTTON2, 520, 88, 92, 14
        COMBOBOX        IDC_COMBO1, 9, 23, 119, 30, CBS_DROPDOWN | CBS_DISABLENOSCROLL | WS_VSCROLL
    END
    

    Der Vorläufige Code zum Material lesen

    void ReadMaterial(FILE* pFile,HWND hWnd,c3dsloader* Loader)
    {
    	char name[128];
    
    	ns3DSChunkHeader chunk;
    	//SendDlgItemMessage(hWnd, IDC_COMBO1, CB_RESETCONTENT, 0, 0);
    
    	//mbox("Material Lesen");
    	bool b = true;
    	while(!feof(pFile) && b)
    	{
    		fread(&chunk,sizeof(chunk),1,pFile);
    		switch(chunk.wChunkID)
    		{
    
    			case 0xA000:
    				for(int iChar = 0; iChar < 128; iChar++)
    				{
    					fread(&name[iChar],sizeof(char),1,pFile);
    					if(name[iChar] == 0)break;
    	            }
    
    				EffectPart Ep;
    				sprintf(Ep.EffektName,"%s",name);
    				SendDlgItemMessage(hWnd, IDC_COMBO1, CB_ADDSTRING,0,(LPARAM) name);
    
    				break;
    			default:
    
    				if(  (chunk.wChunkID >= 0x1000 && chunk.wChunkID < 0xA000)
    					|| chunk.wChunkID >= 0xAFFF)
    				{
    					fseek(pFile,-(int)(sizeof(chunk)),SEEK_CUR);
    					return;
    				}
    
    				fseek(pFile,chunk.dwChunkSize - sizeof(chunk),SEEK_CUR);
    
    				break;
    		}
    
    	}
    	//SendDlgItemMessage(hWnd, IDC_COMBO1, CB_ADDSTRING,0,(LPARAM)"a");
    	//SendDlgItemMessage(hWnd, IDC_COMBO1, CB_ADDSTRING,0,(LPARAM)"b");
    	//SendDlgItemMessage(hWnd, IDC_COMBO1, CB_SETCURSEL, 0, 0);
    }
    

    EDIT:
    An keiner anderen Stelle wird eine Nachricht an das Dropdown-Menü gesendet



  • OK ich habe das Problem gelöst!
    ResEdit hat die höhe der ComboBox automatisch auf 30 pixel gestellt, also kann die Liste aufgrund der beschränkten Höhe nur einen Eintrag Anzeigen. Die Lösung war es einfach die höhe der ComboBox zu ändern.


Anmelden zum Antworten