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.
-
http://www.c-plusplus.net/forum/viewtopic.php?t=39123&highlight=bild+internet
und dann halt aufs dialogfeld blitten
-
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 53. Irgendwo (bei button klick oder so) die Funktion aufrufen
GetPicFromHTTP("http://www.newvet.de.vu/test.bmp","C:\\"); //Bild aus dem Netz laden4 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).