Bild im Dialog anzeigen!



  • Ok Danke für eure Hilfe, habe mich heute den ganzen Tag damit geschäftigt und wirklich damit zurechtgefunden hab ich mich nicht.

    Mir ist jetzt ne andere Idee gekommen welche zwar nicht ganz so schön ist wie Tabs aber auch seinen Sinn und Zweck erfüllt.

    Wenn ich statt 3 Tabs einfach 3 Buttons erstelle und dann bei nem Klick auf einen der drei jeweils ein Text angezeigt wird.

    Wollte das im Resource Editor mit dem Static Text aus der Toolbar machen, aber irgendwie bekomm ich da nur eine Zeile Text rein und nicht mein "vorformatierter" Text.

    gibts da noch andere möglichkeiten?
    Ich muss ja eigentlich nur bei den Buttons die jeweiligen TextFelder oder was ich auch dann verwende Sichtbar und unsichbar machen oder?

    würde das so gehen? oder ist das totaler quatsch?
    weil das mit dem Tab Control versteh ich irgendwie nicht.

    ps: sorry, dachte wäre im Winapi forum aber irgendwie wars wohl doch ansi c 🙂

    edit:

    hab jetzt in meinem Dialogfenster ein Editfeld erstellt in dem ich durch drück von verschiedenen Buttons unterscheidliche texte anzeigen will.

    BOOL CALLBACK DialogFunktion (HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
    {
        static HWND hwndEdit1; 
    
    	switch (message)
         {
    	 case WM_INITDIALOG :
    
    		 hwndEdit1 = CreateWindow ( TEXT("edit"), TEXT(""),
                                       WS_CHILD | WS_VISIBLE | WS_BORDER,
                                       0, 0, 180, 20, hDlg, (HMENU)1,
                                       (HINSTANCE) GetWindowLong (hDlg, GWL_HINSTANCE), NULL);
    
    			return TRUE ;
    
         case WM_COMMAND :
              switch (LOWORD (wParam))
              {
              case IDOK :
              case IDCANCEL :
    		  case IDC_CLOSE :
                   EndDialog (hDlg, 0) ;
                   return TRUE ;
              }
              break ;
         }
         return FALSE ;
    }
    

    jetzt ist es aber so das wenn ich mit der maus in das feld klicke sich das ganze dialogfenster schließt, versteh das nicht, war es nicht richtig das edit feld im initDialog zu erzeugen?



  • Benutzt du nen resourcen editor dann brauchst du eigentlich nicht CreateWindow ,
    Um den text im resourceneditor erzeugten textfeld einzufuegen kannste
    SetWindowText(GetDlgItem(hDlg,IDC_TEXT),"Hier dein text verwenden");



  • muss ich das dann mit jeder Zeile einzeln machen?

    hab nen etwas größeren Text den ich da anzeigen will.

    edit: hab das jetzt mit dem Edit feld versucht, klappt auch soweit.

    Nur wenn ich jetzt diesen Text in das Edit feld kopieren will, wie mache ich das?

    Benutzt du nen resourcen editor dann brauchst du eigentlich nicht CreateWindow ,
    Um den text im resourceneditor erzeugten textfeld einzufuegen kannste
    SetWindowText(GetDlgItem(hDlg,IDC_TEXT),"Hier dein text verwenden");

    habs versucht mit mehreren SetWindowText funktionen hintereinander, funktioniert leider nicht da er immer das letzte reinschreibt.

    Wie kann ich die Grenzen des Edit felds festelegen? also das er den Text nicht unendlich nach rechts ausdehnt sondern wenn das sichbare feld aufhört er einen neuen absatz macht mit scrollbalken und so?

    Ich weiß sind wahrscheinlich die derben dau fragen aber ich find echt nix was mir weiterhilft



  • Unter Edit Eigenschaften vom EDIT Feld auf Multiline und den hacken von HScroll entfernen

    Frage: Was verstehst du unter zeile



  • Wusste nicht ob ich für jede Zeile aus meinem Text diese Funktion aufrufen muss. Aber das geht ja nicht da er immer nur den letzten funktionsaufruf dann in die Edit schreibt, bzw die vorhergehenden aufrufe halt überschrieben werden im Edit feld



  • geht schon wen man ne funktion schreibt hier n kleines Bsp.:

    http://www.winapi.net/index.php?inhalt=s10



  • ok danke

    das lp text ist dann ein String den ich der Funktion übergebe?

    muss ich statt hwnd mein Edit feld angeben oder? demnach wäre der hwnd übergabewert überflüssig oder?

    hab versucht durch

    char * lpText = {"test"};

    die funktion mal zu testen, kompilieren geht zwar aber es tut sich nix, habe auch das hwnd durch mein edit feld ersetzt.

    Glaub aber das dass noch net so richtig ist.



  • Eigentlich functioniert das so das positionierst du igendwo oben ueber WinMain

    BOOL Edit_AddText(HWND hWnd, LPCTSTR lpText)
    {
       DWORD dwStart = 0, dwEnd = 0;
       int nLen;
    
       nLen = GetWindowTextLength(hWnd);
       SendMessage(hWnd, EM_GETSEL, (WPARAM)&dwStart, (LPARAM)&dwEnd);
       SendMessage(hWnd, EM_SETSEL, (WPARAM)nLen, (LPARAM)nLen);
       SendMessage(hWnd, EM_REPLACESEL, (WPARAM)FALSE, (LPARAM)lpText);
       SendMessage(hWnd, EM_SETSEL, (WPARAM)dwStart, (LPARAM)dwEnd);
       return(TRUE);
    }
    

    und dan rufst du es so auf unter WM_CREATE oder WM_INITDIALOG:

    Edit_AddText(hEdit,"Dein Text");
    
    //oder
    char szText[]="Dein TEXT";
    Edit_AddText(GetDlgItem(hWnd,IDC_DEINEDIT),szText);
    


  • Ah ok Danke,

    Hab das jetzt aber folgendermaßen gelöst, zwar nicht für mich die perfekte lösung aber es geht schonmal.

    Ich lese den Text aus der Datei aus und sende ihn dann an das Edit feld.

    Problem ist nur das ich noch irgendein zeichen müll am ende mit bekomme wenn der Text schon aufgehört hat.
    Danke mal das muss am auslesen liegen, finde aber keinen Fehler.

    FILE *fp;
    	char *buffer;
    	int iFileSize;
    
    	fp = fopen(filename, "rb");			/* Öffnet Datei mit Lesezugriff */
    
    	if(fp != NULL)
        {
         fseek(fp, 0, SEEK_END);
         iFileSize = ftell(fp);
         buffer = malloc(iFileSize);
    
         fseek(fp, 0, SEEK_SET);
         fread(buffer, 1, iFileSize, fp);
         fclose(fp);
        }
    
    	Edit_AddText(GetDlgItem(hdlg, IDC_EDIT1), buffer);
    	free(buffer);
    


  • Was mir noch einfällt, ich musste damit das wie oben geht mein Text in 3 verschiedene Dateien Packen. Da ich jeden Text mit nem Seperaten Button in das Edit feld schreiben will.

    Finde das jetzt aber ziemlich blöd und würde die Texte lieber in ein Textfile machen. Aber die Funktionsweiße soll erhalten bleiben.

    Also das ich 3 Texte in nem Text File hab, Button 1 lädt nur Text eins, Button 2 zeigt nur Text 2 an usw.

    Damit müsste ich aber irgendwie in dem Textfile nen Start und Endpunkt zum auslesen festlegen können. ist das möglich nen bestimmten bereich auszulesen?



  • mueste mit strtok functioniern

    kl. bsp liest alles ein bis : ein
    und ab der while schleife den rest

    char* pToken;
    char time_0[6];
    char time_1[6]; 
    char szTextR1[10];
    
    pToken = strtok(szTextR1, ":");
    
    if (pToken) 
    { 
        sprintf(time_0,"%s",pToken); 
        while ( (pToken = strtok(NULL, ":")) ) 
        { 
           sprintf(time_1,"%s",pToken); 
        } 
    }
    

    must halt noch auf deine beduerfnisse abaendern obs geht



  • genau super funktion 🙂

    jetzt kann ich das alles in eine Datei Packen.

    Habe das jetzt so gemacht das ich die 3 Texte mit 3 unterschiedlichen Zeichen mit der strtok raushole.

    Also

    BLABLABLABLABLABLA
    BLABLABLALBLBLLAL
    |
    BLABLABLABLALBA
    BLALBLLLALBVLAL

    ERKGKREKGERGRE
    reKGKEJGREJGRE

    Das erste abzufragen ist ja einfach einfach mit strtok bis zum "|" abfragen.

    Wenn ich allerdings jetzt den Text zwischen "|" und "#" haben will wird schwerer.
    Also frage ich bis "#" damit der rest danach weg ist.

    Jetzt wollte ich den String bis zum "|" durchlaufen lassen und alles was danach kommt in einen neuen kopieren, damit ich den Text zwischen "|" und "#" nun bekomme.
    Denke von der Idee her ists soweit ok, aber ich kanns nicht in Code umsetzen da ich mit den String grad net klar komme.

    soweit habe ichs bereits:

    hilf = strtok(buffer, "#");
    
    			while(hilf[x] != "|")
    				x++;
    			for(x; hilf[x] != '\0'; x++)
    			{
    				temp[y] = hilf[x];
    				y++;
    			}
    			strcpy(ptoken, temp);
    

    Hier meine Variablen:

    char *buffer;
    	char *ptoken;
    	char temp[2048];
    	char hilf[2048];
    

    bekomme bei dieser Zeile ("hilf = strtok(buffer, "#");") immer die Meldung "Linker Operand muss ein L-Wert sein"

    ich hab grad irgendwie mit Strings/Array nen Problem.



  • So hab jetzt nochmal bissle gegoogelt und eine nette String funktion gefunden

    Strchr()

    Diese Sucht in einem String ein bestimmtes Zeichen.

    Habe das dann mal so Realisiert.

    ptoken = strtok(buffer, "#");
    			//strchr(ptoken, (int)'|'));
    			Edit_AddText(GetDlgItem(hdlg, IDC_EDIT1), strchr(ptoken, (char)'|'));
    

    jetzt sucht sie das | in meinem String.

    Dumm ist jetzt nur noch das sie das | auch noch mit Ausgibt. Jetzt müsste ich damit das weg geht sozusagen den beim String dieses Zeichen löschen und den Rest irgendwie behalten, aber ich weiß nicht wie.

    Noch ein PRoblem, damit ich dem Thread Titel auch wieder gerecht werde.

    Das mit dem Bild habe ich jetzt so geschrieben, allerdings passiert nichts.

    static HBITMAP hBitmap1;
    	static HDC BhDC;
    	static HDC hDC;
    
    ...
    
    /*HBITMAP*/ hBitmap1 = LoadImage(GetModuleHandle (NULL), "bitmap2.bmp", IMAGE_BITMAP, 405, 12, LR_DEFAULTCOLOR | LR_LOADFROMFILE);
    		 /*HDC*/ BhDC = CreateCompatibleDC(hDC);
    		 SelectObject(BhDC,hBitmap1);
    		 BitBlt(hDC,0,0,48,48,BhDC,0,0,SRCCOPY);
    

    Am anfang sagt mir VS2003 das er hDC nicht kennt. Also hab ich oben einfach "static HDC hDc"geschrieben. Im grunde weiß ich nicht mal wofür das ist. Denke das könnte es sein warum es nicht geht.

    Der Pfad zum Bild müsste richtig sein. die Bitmap ist im Projektordner und wird auch unter Ressourcendateien aufgelistet.



  • frage sind bestimmte voraussetzungen gesetzt um das logo/Bild aufzurufen denn das Picture Control oder auch Static Control mit SS_BITMAP Style Laden Bilddateien im format Bitmap direct aus der Resource

    vieleicht hilft dir dieses Bsp.: bei deinem Problem
    www.asajia.de/home/subpages/devlopment/sourcecodes/loadpicvcnet.rar


Anmelden zum Antworten