Dialogfeld mit Banner



  • hi

    Hoffe es kann mir jemand weiterhelfen.
    Ich möchte einen Banner in ein Dialogfeld einfügen.
    Wer ICQ kennt; bei dem Programm kann man oben auch Werbung in Form eines Banners sehen. Das Dialogfeld soll ein Startmenü werden und der Banner auf dem Webspace aktualisiert werden, und somit auch im Startmenü. Mit anderen Worten, es soll einfach ein Link zur URL des Banners geschaffen werden.





  • puh ich dachte man könnte mir ne einfache Erklärung geben
    bin jetzt auch kein Profi.



  • Also ich hab mal die obere Funktion in deinem Link ausprobiert:

    #include <afxinet.h> 
    
    #define SUCCESS 0 
    #define INVALID_PATH 1 
    #define ACCESS_DENIED 2 
    #define DISK_FULL 3 
    #define INVALID_URL 4 
    #define FILE_NOT_FOUND 5 
    
    int GetPicFromHTTP(CString strURL, CString strPathToSaveTo) 
    { 
        DWORD dwBuffer = 256; 
        if(!InternetCanonicalizeUrl(strURL,strURL.GetBuffer(256), &dwBuffer,0)) 
        { 
            strURL.ReleaseBuffer(); 
            return INVALID_URL; 
        } 
        strURL.ReleaseBuffer(); 
        CString strTmpURL = strURL; 
        strTmpURL.MakeLower(); 
        if(strTmpURL.Find("http://")!=-1) 
            strURL.Delete(0,7); 
        CInternetSession INetSession; 
        CHttpConnection *HTTPConn=NULL; 
        CHttpFile *HTTPFile=NULL; 
        TRY 
        { 
            HTTPConn=INetSession.GetHttpConnection(strURL.Mid(0,strURL.Find("/"))); 
            strURL.Delete(0,strURL.Find("/")+1); 
            HTTPFile = HTTPConn->OpenRequest(CHttpConnection::HTTP_VERB_GET,strURL); 
            HTTPFile->SendRequest(); 
        } 
        CATCH(CInternetException, pEx) 
        { 
            HTTPFile->Close(); 
            HTTPConn->Close(); 
            INetSession.Close(); 
            delete HTTPFile; 
            delete HTTPConn; 
            return FILE_NOT_FOUND; 
        } 
        END_CATCH 
    
        CString strMime; 
        HttpFile->QueryInfo(HTTP_QUERY_CONTENT_TYPE, strMime); 
        if(strMime.Find("html")!=-1) 
        { 
            HttpFile->Close(); 
            HttpConn->Close(); 
            INetSession.Close(); 
            delete HTTPFile; 
            delete HTTPConn; 
            return FILE_NOT_FOUND; 
        } 
    
        CFile *pFile; 
        if(strPathToSaveTo.Right(1)!='\\') 
            strPathToSaveTo+="\\";     
        TRY 
        { 
            pFile = new CFile(strPathToSaveTo+strURL.Right(strURL.GetLength()-strURL.ReverseFind('/')), CFile::modeCreate | CFile::modeWrite); 
        } 
        CATCH(CFileException, pEx) 
        { 
            HTTPFile->Close(); 
            HTTPConn->Close(); 
            INetSession.Close(); 
            delete HTTPFile; 
            delete HTTPConn; 
            if(pEx->m_cause == CFileException::badPath) 
                return INVALID_PATH; 
            if(pEx->m_cause == CFileException::accessDenied) 
                return ACCESS_DENIED; 
            if(pEx->m_cause == CFileException::diskFull) 
                return DISK_FULL; 
        } 
        END_CATCH 
    
        char *chBuffer = new char[5*1024+1]; 
        int nRead = 0; 
        while((nRead = HTTPFile->Read(chBuffer, 5*1024))) 
        { 
            chBuffer[nRead] = '\0'; 
            pFile->Write(chBuffer,nRead); 
        } 
        HTTPFile->Close(); 
        HTTPConn->Close(); 
        INetSession.Close(); 
        delete HTTPFile; 
        delete HTTPConn; 
        delete[] chBuffer; 
        CString strBuffer; 
        pFile->Close(); 
        pFile->Open(strPathToSaveTo+strURL.Right(strURL.GetLength()-strURL.ReverseFind('/')),CFile::modeRead); 
        pFile->Read(strBuffer.GetBuffer(pFile->GetLength()), pFile->GetLength()); 
        pFile->Close(); 
        strBuffer.ReleaseBuffer(); 
        strBuffer.MakeLower(); 
        delete pFile; 
        return SUCCESS; 
    }
    

    Hab auch wie er gesagt hat die Wininet.lib eingebunden.
    Trotzdem zeigt er bei mir die Fehlermeldung
    LINK : fatal error LNK1104: Datei "nafxcwd.lib" kann nicht geoeffnet werden
    Was zur Hölle...



  • 1. Funktion hinzufügen (die fehler ausbessern (HTTP statt Http)

    2. Ganz oben in die selbe Datei:

    #include <afxinet.h>  
    #pragma comment (lib,"Wininet.lib")
    #define SUCCESS 0  
    #define INVALID_PATH 1  
    #define ACCESS_DENIED 2  
    #define DISK_FULL 3  
    #define INVALID_URL 4  
    #define FILE_NOT_FOUND 5
    

    3. Irgendwo (bei button klick oder so) die Funktion aufrufen

    GetPicFromHTTP("http://www.newvet.de.vu/test.bmp","C:\\"); //Bild aus dem Netz laden
    

    4 In die OnPaint des Dialoges:

    CDC dc;
    	dc.CreateCompatibleDC(NULL);  //DC erstellen
    	CBitmap bmp;
    	HBITMAP hBitmap = (HBITMAP) ::LoadImage(AfxGetInstanceHandle(),"C:\\test.bmp", IMAGE_BITMAP, 0, 0,LR_LOADFROMFILE | LR_CREATEDIBSECTION); //Bild von der Platte laden
    	if (hBitmap) //Wenn bild erfolgreich geladen
    	{
    		bmp.Attach(hBitmap);   
    		dc.SelectObject(&bmp);
    		GetDC()->BitBlt(0,0,200,200,&dc,0,0,SRCCOPY);	 //Bild blitten
    	}
    

    edit: bug im forum



  • Er zeigt nach dem Kompilieren zwar keine Fehlermeldung mehr an aber wenn ich das Programm starte, kommt:

    Debug Assertion Failed!
    File: wingdi.cpp
    Line: 109



  • ah ok jetzt gehts, vielen dank.
    habs mit nem reinen dialogfeldbasierenden projekt versucht.
    jetzt meine nächste frage.
    wie kann man es machen, dass er als erstes versucht das bmp von der url zu laden. falls das connecten mit der url nicht funktioniert, soll er auf das standard-bmp auf der platte zurückgreifen.



  • Die Funktion gibt doch nen Wert zurück, prüf einfach ob er 0 ist (bild geladen) oder eben nicht (ungleich 0).


Anmelden zum Antworten