Startscreen von Adobe-Produkten ...
-
schmeiss den afxwin-include raus und setze den include der splashscreenheaderdatei unter den include von stdafx.h. Dann sollte es eigentlich tun.
-
Das funktioniert nicht, ohne afxwin.h hab ich 30 Fehlermeldungen. Alle hängen damit zusammen, dass der CBitmap und davon abgeleitete Parameter nicht erkennt ...
Hier der Anfang der SplashClient.cpp-Datei:
// =========================================================================== // File SplashClient.cpp // Desc Test stub for the CSplash class // =========================================================================== #include "stdafx.h" #include "splash.h" int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { CBitmap bitmap; bitmap.CreateBitmap( 100, 900, 1,24, NULL ); CDC MemDC; CDC* pDC = GetDC(); MemDC.CreateCompatibleDC( pDC ); MemDC.SelectObject(bitmap); MemDC.MoveTo(10,100); // x und y Koordinaten oder ?? MemDC.LineTo(10,100); //dito x,y ?? wozu ist dann BitBlt ?? pDC->SelectObject(bitmap); pDC->BitBlt(0,0,900,100, &MemDC, 0,0, SRCCOPY); DC2Bitmap(pDC->m_hDC,1024,768,"c:\\testbild.bmp"); //ok is klar Größe der ganzen Bilddatei angeben
-
hm, dann versuch mal, ob es klappt, wenn du in die sourcecodedatei des splashscreens die stdafx.h includierst.
-
Okay, das habe ich jetzt gemacht und es funktioniert. Vielen dank. Nun ist aber leider gleich das nächste Problem aufgetreten ... GetDC() will mein Compiler nicht haben, weil er meint, dass er ein Argument übergeben haben will. Das ist ein Handle ...
Suche ich auf MSDN nach GetDC bekomme ich nicht wirklich viel Infos:
*Retrieves the device context that currently has the image selected into it.
HDC GetDC( ) const throw( );
Return Value
A handle to a device context.Remarks
For each call to GetDC, you must have a subsequent call to ReleaseDC.*Außerdem wird da HDC und nicht CDC verwendet ...
-
[ none] schrieb:
Ich erkläre dir nun gerne nochmal, dass es vllt. bei dem Reader mit dem Screenshot funktioniert. Bei Photoshop kannst du aber die Fenster im Hintergrund verschieben. Du solltest also nicht von einem prog auf alle anderen verallgemeinern. ich würde erwarten, dass du es nun endlich begriffen hast. Ansonsten würde ich wirklich noch ernsthafter an dir zweifeln.
btw. Lass mich raten, dass mit Photoshop haste überlesen ?
oder warum bist du so geil auf den Reader ?hey du ei, die fenster von PS erscheinen erst, wenn der Splashscreen verschwunden ist. Bevor man einen auf klugscheißer macht, sollte man wissen wovon man redet
-
könnt ihr euren persönlichen Streit bitte über diese netten privaten Nachrichten verschicken? Wäre echt super, weil sonst der Zusammenhang dieses Themas total verlorengeht.
THX
-
Er will ein Handle auf ein Fenster (ein HWND).
-
Ihr seid doch immer noch bei der CDC* pDC = GetDC();, oder? Bei mir funktioniert die Funktion reibunglos, was habt ihr da für Probs?
-
... nicht mehr ganz. Mittlerweile habe ich ein Bildschirmbild als Bitmap. Das ist ja schonmal nicht schlecht. Was aber momentan noch scheitert, ist das Speichern. Den Code für die Desktop-Aufnahme habe ich aus einem anderen Thread:
Mein Problem ist, dass mein Filename wie in dem Beispielprogramm beschrieben, ein char ist, CreateFile aber einen anderen Paramter bekommen will. Hier mal meine Fehlermeldung:
error C2664: 'CreateFileW' : cannot convert parameter 1 from 'char *' to 'LPCWSTR'
Eine explizite Typumwandlung hab ich einfach mal probiert (ich weiß: ziemlich diletantisch ... aber naja .. ) ... das klappt natürlich nicht.
Tipp???
-
Ich finde mich gerade nicht so gut in diesem Code gewür zurecht, kannst de denn nicht einfach stat ne char Variable, ne LPCWSTR Variable anlegen? also
LPCWSTR Filename;
-
Okay, dann kommt hier mal mein kompletter Quelletext:
#include "stdafx.h" #include <sstream> #include <string> #include <stdlib.h> #include <iostream> #include <stdio.h> int dc2bitmap(HDC hdc, int width, int height); int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { HDC hdc; RECT rt; HWND hWnd; int iBreite = 0; int iHoehe = 0; int result = 0; hWnd=GetDesktopWindow(); hdc = GetWindowDC(hWnd); GetWindowRect(hWnd,&rt); iBreite = rt.right - rt.left; // Wir brauchen die Differenz iHoehe = rt.bottom - rt.top; // also die Breite und Höhe des Fensters result = dc2bitmap(hdc, iBreite, iHoehe); ReleaseDC(hWnd,hdc); return 0; } int dc2bitmap(HDC hdc, int width, int height) { HDC hdc2; hdc2 = CreateCompatibleDC(hdc); HBITMAP aBmp; BITMAPINFO bi; HGDIOBJ OldObj; HANDLE fileHandle; void *dibvalues; BITMAPFILEHEADER bmfh; BITMAPINFOHEADER bmih; DWORD bytes_write; DWORD bytes_written; ZeroMemory(&bmih,sizeof(BITMAPINFOHEADER)); bmih.biSize=sizeof(BITMAPINFOHEADER); bmih.biHeight=height; bmih.biWidth=width; bmih.biPlanes=1; bmih.biBitCount=24; bmih.biCompression=BI_RGB; bmih.biSizeImage = ((((bmih.biWidth * bmih.biBitCount) + 31) & ~31) >> 3) * bmih.biHeight; bmih.biXPelsPerMeter = 0; bmih.biYPelsPerMeter = 0; bmih.biClrImportant = 0; bi.bmiHeader=bmih; aBmp=CreateDIBSection(hdc,&bi,DIB_RGB_COLORS,(void**)&dibvalues,NULL,NULL); OldObj=SelectObject(hdc2,aBmp); BitBlt(hdc2,0,0,width,height,hdc,0,0,SRCCOPY); ZeroMemory(&bmfh,sizeof(BITMAPFILEHEADER)); bmfh.bfOffBits=sizeof(BITMAPFILEHEADER)+sizeof(BITMAPINFOHEADER); bmfh.bfSize=(3*bmih.biHeight*bmih.biWidth)+sizeof(BITMAPFILEHEADER)+sizeof(BITMAPINFOHEADER); bmfh.bfType=0x4d42; bmfh.bfReserved1 = 0; bmfh.bfReserved2 = 0; fileHandle=CreateFile(L".\\Bitmap.bmp",GENERIC_READ | GENERIC_WRITE,(DWORD)0,NULL, CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL,(HANDLE) NULL); // Write the BITMAPFILEHEADER bytes_write=sizeof(BITMAPFILEHEADER); //Write the BITMAPINFOHEADER bytes_write=sizeof(BITMAPINFOHEADER); //Write the Color Index Array??? bytes_write=bmih.biSizeImage;//3*bmih.biHeight*bmih.biWidth; // CloseHandle(fileHandle); DeleteObject(SelectObject(hdc2,OldObj)); DeleteDC(hdc2); return 1; }
Das Problem liegt an dieser Zeile:
fileHandle=CreateFile(L".\\Bitmap.bmp",GENERIC_READ | GENERIC_WRITE,(DWORD)0,NULL, CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL,(HANDLE) NULL);
Nun habe ich das Problem, dass zwar ein Bitmap erzeugt wird, das ist jedoch 0 KB gross. Bei einer normalen Monitorauflösung ... bissl wenig ... scheinbar werden die daten garnicht geschrieben ... *seufz
-
Sorry das ich jetzt mal so dazwischen funke,
und die Konvertierung zum WideChar haste ja schon selber gelöstaber seit ihr euch sicher das der AdobeReader6 nen Screenshot macht?
Ich habe die Ehre noch unter WinNT 4.0 zu arbeiten und da ist der gesamte
vereckige Bereich des SplashScreens einfach nur grau.