|
JLI Spieleprogrammierung
|
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
homer Jay Mini JLI'ler
Anmeldedatum: 13.01.2005 Beiträge: 12
Medaillen: Keine
|
Verfasst am: 25.02.2005, 11:21 Titel: Screenshot während der Laufzeit... |
|
|
dere alle miteinander
Ich habe aus folgendem Beitrag ( http://www.jliforum.de/board/viewtopic.php?t=3306 ) den Code verwendet um ein Sreenshot zu machen, funktioniert auch toll.
Wenn ich nun diesen code in eine funktion packe, und während der laufzeit ein Screenshot aufnehmen und dieses dann gleich im programm verwenden möchte (in einer oberfläche bilten oder so), wo muss da der funktionsaufruf sein??
Ich nehme an in der WINAPI WinMain vor der erzeugung des Fenster-Handles (hWnd = CreateMainWindow(hInstance) oder?
Ich arbeite mit SDK directX 8.x und VC 6.0 und XP!
Hier der code der WinMain
CPP: | int WINAPI WinMain(HINSTANCE hInstance, // Handle der Programminstanz
HINSTANCE hPrevInstance, // Handle der letzten Instanz
LPSTR lpCmdLine, // Kommandozeile
int nCmdShow) // Art wie das Fenster angezeigt werden soll
{
makeScreenshot();
// Fenster erzeugen und Handle speichern
hWnd = CreateMainWindow(hInstance);
// Wenn der Rückgabewert 0 ist, ist ein Fehler aufgetreten
if(0 == hWnd)
{
return Error("Fehler beim Erzeugen des Fenster");
}
if(!InitDirectDraw())
{
return FALSE;
}
// Struktur, in der Informationen zur Nachricht gespeichert werden
MSG msg;
// Diese Schleife läuft bis WM_QUIT gesendet wird
while(GetMessage(&msg,NULL,0,0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
// Rückgabewert an Windows
return 0;
} |
und makeScreenshot()
CPP: | void makeScreenshot()
{
//********************SREENSHOT**************************
HDC hdcScreen = CreateDC("DISPLAY", NULL, NULL, NULL);
HDC hdcCompatible = CreateCompatibleDC(hdcScreen);
int iWidth = GetDeviceCaps(hdcScreen, HORZRES);
int iHeight = GetDeviceCaps(hdcScreen, VERTRES);
HBITMAP hbmScreen = CreateCompatibleBitmap(hdcScreen,
iWidth,
iHeight);
HBITMAP hbmOldBitmap = (HBITMAP)SelectObject(hdcCompatible, hbmScreen);
BitBlt(hdcCompatible,
0,0,
iWidth,
iHeight,
hdcScreen,
0,0,
SRCCOPY);
/* Nun Speicher für einen Puffer reservieren, der die Daten
der 32-Bit-Bitmap temporär aufnimmt. */
DWORD dwImageSize = (DWORD)(iWidth * iHeight * 32 / 8 );
//void *pImage = HeapAlloc(GetProcessHeap(), 0, dwImageSize); // oder so
void *pImage = new BYTE[dwImageSize];
/* Als Nächstes Daten der 32-Bit-Bitmap in den Puffer laden. */
BITMAPINFO bmi =
{
sizeof(BITMAPINFOHEADER),
iWidth,
iHeight,
1,
32,
BI_RGB,
0,
0,
0,
0,
0
};
GetDIBits(hdcCompatible, hbmScreen, 0, (UINT)iHeight, pImage, &bmi, DIB_RGB_COLORS);
/* Neue Datei erstellen. */
HANDLE hFile = CreateFile(
"K:\\screenshot.bmp",
GENERIC_WRITE,
0,
NULL,
CREATE_ALWAYS,
FILE_ATTRIBUTE_NORMAL,
NULL);
if(hFile == INVALID_HANDLE_VALUE)
{
/*return */MessageBox(NULL, "CreateFile failed.", "Failure", MB_ICONERROR);
}
/* Jetzt Header für Bitmap präparieren. */
BITMAPFILEHEADER bmpfh =
{
'MB',
sizeof(BITMAPFILEHEADER),
0,
0,
sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFOHEADER)
};
/* Nun Header für Bitmap in Datei schreiben. */
DWORD dwWritten;
if(!WriteFile(hFile, &bmpfh, sizeof(BITMAPFILEHEADER), &dwWritten, NULL) || dwWritten != sizeof(BITMAPFILEHEADER))
{
/*return*/ MessageBox(NULL, "WriteFile failed.", "Failure", MB_ICONERROR);
}
if(!WriteFile(hFile, &bmi.bmiHeader, sizeof(BITMAPINFOHEADER), &dwWritten, NULL) || dwWritten != sizeof(BITMAPINFOHEADER))
{
/*return*/ MessageBox(NULL, "WriteFile failed.", "Failure", MB_ICONERROR);
}
/* Anschließend Image in Datei schreiben. */
if(!WriteFile(hFile, pImage, dwImageSize, &dwWritten, NULL) || dwWritten != dwImageSize)
{
/*return*/ MessageBox(NULL, "WriteFile failed.", "Failure", MB_ICONERROR);
}
SelectObject(hdcCompatible, hbmOldBitmap);
delete pImage;
DeleteObject(hbmScreen);
DeleteDC(hdcScreen);
DeleteDC(hdcCompatible);
//*****************************SCREENSHOT-ENDE*************************
} |
danke im voraus
homer Jay |
|
Nach oben |
|
|
Jonathan_Klein Living Legend
Alter: 37 Anmeldedatum: 17.02.2003 Beiträge: 3433 Wohnort: Siegerland Medaillen: Keine
|
Verfasst am: 25.02.2005, 11:57 Titel: |
|
|
du meinst vor der Erzeugung des Fensters um ein Bild nur vom Desktop OHNE dein Programm? Naja, vor ShowWindow sollte es reichen, denke ich. _________________ https://jonathank.de/games/ |
|
Nach oben |
|
|
homer Jay Mini JLI'ler
Anmeldedatum: 13.01.2005 Beiträge: 12
Medaillen: Keine
|
Verfasst am: 25.02.2005, 16:40 Titel: |
|
|
Nunja wie soll ich sagen ich habe niergends in meinem code den aufruf bzw. funktion ShowWindow (oder bin ich zu blöd es zu finden)??
ich habe schon wie oben in meinem codeausschnitt versucht den aufruf meiner funktion in der winMain funktion vor der erzeugung des handles ganz am anfang zu machen aber dann wird zwar der screenshot gemacht aber das programm beendet sofort?
Wenn ich aber nun den funktinonsaufruf am anfang weglasse kann ich auf den Sreenshot zugreifen und ihn verwenden? ? |
|
Nach oben |
|
|
Jonathan_Klein Living Legend
Alter: 37 Anmeldedatum: 17.02.2003 Beiträge: 3433 Wohnort: Siegerland Medaillen: Keine
|
Verfasst am: 25.02.2005, 18:36 Titel: |
|
|
ShowWindow sollte sich in der CreateMainWindow Funktion befinden.
Und wenn das Programm sofort beendet, wenn du das Screenshot machst, würde ich auf einen Fehler tippen, der das Prog zum crashen bringt.
[Edit]hm, erklär nochmla ganz genau, was das Prog machen soll, ich glabue ich habe dat net gerafft, du greifst auf das Screenshot zu, ohne es erstellt zu haben?[/Edit] _________________ https://jonathank.de/games/ |
|
Nach oben |
|
|
homer Jay Mini JLI'ler
Anmeldedatum: 13.01.2005 Beiträge: 12
Medaillen: Keine
|
Verfasst am: 26.02.2005, 18:24 Titel: |
|
|
Also das Programm soll so ablaufen:
Programm wird gestartet
Sreenshot wird erstellt (während der Laufzeit)
erstellter Screenshot soll als hintergrund auf die primäre Oberlflächt geblitet werden (der Sreenshot soll einfach auf dem ganzen Bildschirm angezeit werden)
Ich habe oben bei meinem ersten beitrag die WinMain und mein Sreenshot - Funktion gepostet (ist aber nur ein Teil des gesamten Codes)!
Dort gibt es gleich zu Beginn der WinMain - funktion den aufruf
Wenn ich das Programm mit diesem Aufruf kompiliere und ausführe wird zwar der Sreenshot erstellt und er befindet sich auf der Festplatte aber das Preogramm stürzt gleich ab (Screenshot wird nicht als primäre Oberläche angezigt).
Lasse ich nun den Aufruf weg wird aber nun der Sreenshot angeziegt (wenn sich einer auf der Festplatte befindet wenn ich ihn nicht zuvor gelöscht habe)!!
Ich hoffe ich habe das Prog halbwegs verständlich beschrieben |
|
Nach oben |
|
|
Jonathan_Klein Living Legend
Alter: 37 Anmeldedatum: 17.02.2003 Beiträge: 3433 Wohnort: Siegerland Medaillen: Keine
|
Verfasst am: 26.02.2005, 18:31 Titel: |
|
|
zeig mal wo du das Screenshot einsetzt und anzeigst (oder bin ich zu blöd das zu finden?) _________________ https://jonathank.de/games/ |
|
Nach oben |
|
|
PeaceKiller JLI Master
Alter: 35 Anmeldedatum: 28.11.2002 Beiträge: 970
Medaillen: Keine
|
Verfasst am: 26.02.2005, 18:51 Titel: |
|
|
Schonmal versucht zu debuggen? _________________ »If the automobile had followed the same development cycle as the computer, a Rolls-Royce would today cost $100, get a million miles per gallon, and explode once a year, killing everyone inside.«
– Robert X. Cringely, InfoWorld magazine |
|
Nach oben |
|
|
homer Jay Mini JLI'ler
Anmeldedatum: 13.01.2005 Beiträge: 12
Medaillen: Keine
|
Verfasst am: 27.02.2005, 17:30 Titel: |
|
|
@Jonathan_Klein
Nein du bist nicht zu blöd, ich hab bis jezt nur noch nicht den ganzen code gepostet hier is der ganze Code:
CPP: | #include <ddraw.h>
#include <stdio.h>
// Bildschirmbreite und -höhe
#define SCR_WIDTH 1024
#define SCR_HEIGHT 768
// Farbtiefe des Videomodus
#define COLOR_DEPTH 16
#define IMAGE_FILE "K:\\screenshot.bmp" //"..\\..\\media\\jli.bmp"
// Prototypen
// Anwendungsfenster erzeugen
HWND CreateMainWindow(HINSTANCE hInstance);
//Callback Funktion zur Nachrichtenbehandlung
LRESULT CALLBACK WindowFunc(HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam);
// DirectDraw-Objekte initialisieren
BOOL InitDirectDraw(void);
// Objekte/Speicher freigeben
void CleanUpDirectDraw(void);
// Ausgabefunktion
void Render(void);
// Fehlermeldung erzeugen
BOOL Error(char* msg);
//Screenshot erstellen
void makeScreenshot();
// Funktion um eine Oberfläche anzulegen,
// als Grundlage dient eine Bitmap-Datei
LPDIRECTDRAWSURFACE7 CreateSurfaceFromBitmap(LPCTSTR File, int dWidth, int dHeight);
// Das Fensterhandle
HWND hWnd = 0;
// Zeiger auf das DirectDraw Interface
LPDIRECTDRAW7 lpDD7 = NULL;
LPDIRECTDRAWSURFACE7 lpDDSPrimary = NULL;
LPDIRECTDRAWSURFACE7 lpDDSurface = NULL;
// Windows main-Funktion
int WINAPI WinMain(HINSTANCE hInstance, // Handle der Programminstanz
HINSTANCE hPrevInstance, // Handle der letzten Instanz
LPSTR lpCmdLine, // Kommandozeile
int nCmdShow) // Art wie das Fenster angezeigt werden soll
{
//makeScreenshot();
// Fenster erzeugen und Handle speichern
hWnd = CreateMainWindow(hInstance);
// Wenn der Rückgabewert 0 ist, ist ein Fehler aufgetreten
if(0 == hWnd)
{
return Error("Fehler beim Erzeugen des Fenster");
}
if(!InitDirectDraw())
{
return FALSE;
}
// Struktur, in der Informationen zur Nachricht gespeichert werden
MSG msg;
// Diese Schleife läuft bis WM_QUIT gesendet wird
while(GetMessage(&msg,NULL,0,0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
// Rückgabewert an Windows
return 0;
}
HWND CreateMainWindow(HINSTANCE hInstance)
{
WNDCLASSEX wndClass; // WNDCLASSEX Struktur
// Struktur initialisieren
wndClass.cbSize = sizeof(WNDCLASSEX); // Größe angeben (nie vergessen!)
wndClass.style = CS_DBLCLKS | CS_OWNDC |
CS_HREDRAW | CS_VREDRAW; // Standard Stile
wndClass.lpfnWndProc = WindowFunc; // Die Callback Funktion angeben
wndClass.cbClsExtra = 0; // Zusätzliche Angaben, wird nicht benötigt
wndClass.cbWndExtra = 0; // Zusätzliche Angaben, wird nicht benötigt
wndClass.hInstance = hInstance; // Anwendungsinstanz
wndClass.hbrBackground = (HBRUSH)GetStockObject(BLACK_BRUSH); // Schwarzer Pinsel
wndClass.hCursor = LoadCursor(NULL, IDC_ARROW); // Normaler Cursor
wndClass.lpszMenuName = NULL; // Das Fenster hat kein Menü
wndClass.lpszClassName = "WindowClass"; // Der Name der Klasse
wndClass.hIcon = LoadIcon(NULL, IDI_WINLOGO); // Windows Logo
wndClass.hIconSm = LoadIcon(NULL, IDI_WINLOGO); // Windows Logo
RegisterClassEx(&wndClass);
return CreateWindowEx(NULL, // Keine erweiterten Stile nutzen
"WindowClass", // Klassenname
"DDSurface", // Fenstertitel
WS_POPUP | // Fenster
WS_VISIBLE, // Eigenschaften
0, 0, // Anfangsposition
SCR_WIDTH, SCR_HEIGHT, // und Größe des Fensters
NULL, // Handle des Elternfensters
NULL, // Handle des Menüs
hInstance, // Anwendungsinstanz
NULL); // wird nicht benötigt
}
// Diese Funktion wird von Windows aufgrufen, wenn eine Nachricht
// für Ihr Programm vorliegt
LRESULT CALLBACK WindowFunc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
// testen, um welche Nachticht es sich handelt
switch(msg)
{
case WM_KEYDOWN:
switch(wParam)
{
case VK_ESCAPE:
DestroyWindow(hWnd);
break;
}
break;
case WM_DESTROY:
CleanUpDirectDraw();
PostQuitMessage(0);
break;
case WM_PAINT:
PAINTSTRUCT ps;
BeginPaint(hWnd,&ps);
Render();
EndPaint(hWnd,&ps);
break;
}
// Wenn wir uns nicht um die Nachricht gekümmert haben wird sie
// an die Standardnachrichtenverarbeitung von Windows geschickt
return (DefWindowProc(hwnd, msg, wParam, lParam));
}
// DirectDraw initialisieren
BOOL InitDirectDraw(void)
{
// DirectDrawObjekt anlegen
if(FAILED(DirectDrawCreateEx(NULL,(void**)&lpDD7,IID_IDirectDraw7,NULL)))
{
return Error("Fehler beim Anlegen des DirectDraw-Objekts");
}
// Kooperationsebene setzen
if(FAILED(lpDD7->SetCooperativeLevel(hWnd,DDSCL_EXCLUSIVE | DDSCL_FULLSCREEN)))
{
return Error("Fehler beim Setzen des Kooperationsebene");
}
// Auflösung und Farbtiefe setzen
if(FAILED(lpDD7->SetDisplayMode(SCR_WIDTH,SCR_HEIGHT,COLOR_DEPTH,0,0)))
{
return Error("Fehler beim Setzen des Kooperationsebene");
}
// Struktur zur Beschreibung einer Oberfläche
DDSURFACEDESC2 ddsd;
// Initialisieren und Größe festlegen
ZeroMemory(&ddsd,sizeof(ddsd));
ddsd.dwSize = sizeof(ddsd);
// Die Angabe wdCaps soll berücksichtigt werden
ddsd.dwFlags = DDSD_CAPS;
// Es soll eine primäre Oberfläche angelegt werden
ddsd.ddsCaps.dwCaps = DDSCAPS_PRIMARYSURFACE;
// Oberfläche anlegen
if(FAILED(lpDD7->CreateSurface(&ddsd,&lpDDSPrimary,NULL)))
{
return Error("Fehler beim Anlegen der primären Oberfläche");
}
// Oberfläche laden
lpDDSurface = CreateSurfaceFromBitmap(IMAGE_FILE,SCR_WIDTH,SCR_HEIGHT);
if(!lpDDSurface)
{
return FALSE;
}
return TRUE;
}
void Render(void)
{
// die Oberfläche, die das geladene Bild enthält
// auf die primäre Oberfläche Blitten
if(FAILED(lpDDSPrimary->Blt(NULL,lpDDSurface,NULL,DDBLT_WAIT,NULL)))
{
Error("Blt ist fehlgeschlagen");
}
}
LPDIRECTDRAWSURFACE7 CreateSurfaceFromBitmap(LPCTSTR File, int dWidth, int dHeight)
{
// Device Context für das Bild und die DirectDraw-Oberfläche anlegen
HDC hBmDC,hSurfDC;
// Handle der zu ladenden Bitmap
HBITMAP hBM;
// Oberflächenbeschreibung
DDSURFACEDESC2 SurfDesc;
// Zeiger auf die Oberfläche
LPDIRECTDRAWSURFACE7 lpDDSurface;
// Bild laden
hBM = (HBITMAP)LoadImage(NULL,File,IMAGE_BITMAP,dWidth,dHeight,LR_LOADFROMFILE);
// testen ob ein Fehler während des Ladens aufgetreten ist
if(NULL == hBM)
{
return 0;
}
// Oberflächenbeschreibung initialisieren
ZeroMemory(&SurfDesc, sizeof(SurfDesc));
SurfDesc.dwSize = sizeof(SurfDesc);
// Caps, Höhe und Breite sollen berücksichtigt werden
SurfDesc.dwFlags = DDSD_CAPS | DDSD_HEIGHT | DDSD_WIDTH;
SurfDesc.ddsCaps.dwCaps = DDSCAPS_OFFSCREENPLAIN;
SurfDesc.dwWidth = dWidth;
SurfDesc.dwHeight = dHeight;
// Oberfläche anlegen
if(FAILED(lpDD7->CreateSurface(&SurfDesc,&lpDDSurface,NULL)))
{
return 0;
}
ZeroMemory(&SurfDesc,sizeof(SurfDesc));
SurfDesc.dwSize = sizeof(SurfDesc);
lpDDSurface->GetSurfaceDesc(&SurfDesc);
// wo befindet sich die erzeugt Oberfläche ?
if(SurfDesc.ddsCaps.dwCaps & DDSCAPS_VIDEOMEMORY)
{
if(SurfDesc.ddsCaps.dwCaps & DDSCAPS_LOCALVIDMEM)
{
OutputDebugString("Oberfläche befindet sich im LOCALVIDMEM (Grafikspeicher)\n");
}
else
{
OutputDebugString("Oberfläche befindet sich im NONLOCALVIDMEM (AGP-Speicher)\n");
}
}
else
{
OutputDebugString("Oberfläche befindet sich im SYSTEMSPEICHER\n");
}
// Device Context der Oberfläche holen
lpDDSurface->GetDC(&hSurfDC);
// Compatiblen Device Context für das Bild anlegen
hBmDC = CreateCompatibleDC(hSurfDC);
// Bild in den Device Context holen
SelectObject(hBmDC,hBM);
// Bild in die Oberfläche kopieren
BitBlt(hSurfDC,0,0,dWidth,dHeight,hBmDC,0,0,SRCCOPY);
// Device Context freigeben
lpDDSurface->ReleaseDC(hSurfDC);
// Device Context und Bild löschen
DeleteDC(hBmDC);
DeleteObject(hBM);
// Zeiger auf die Oberfläche zurückgeben
return lpDDSurface;
}
// Objekte/Speicher freigeben
void CleanUpDirectDraw(void)
{
if(NULL != lpDDSurface)
{
lpDDSurface->Release();
lpDDSurface = NULL;
}
if(NULL != lpDDSPrimary)
{
lpDDSPrimary->Release();
lpDDSPrimary = NULL;
}
if(NULL != lpDD7)
{
lpDD7->Release();
lpDD7 = NULL;
}
}
// Fehlermeldung ausgeben
BOOL Error(char* msg)
{
// als MessageBox
MessageBox(0,msg,"Error",MB_OK);
// und in das Ausgabefenster
OutputDebugString(msg);
OutputDebugString("\n");
return FALSE;
}
void makeScreenshot()
{
//+++++++++++++++++++SREENSHOT+++++++++++++++++++++++
HDC hdcScreen = CreateDC("DISPLAY", NULL, NULL, NULL);
HDC hdcCompatible = CreateCompatibleDC(hdcScreen);
int iWidth = GetDeviceCaps(hdcScreen, HORZRES);
int iHeight = GetDeviceCaps(hdcScreen, VERTRES);
HBITMAP hbmScreen = CreateCompatibleBitmap(hdcScreen,
iWidth,
iHeight);
HBITMAP hbmOldBitmap = (HBITMAP)SelectObject(hdcCompatible, hbmScreen);
BitBlt(hdcCompatible,
0,0,
iWidth,
iHeight,
hdcScreen,
0,0,
SRCCOPY);
/* Nun Speicher für einen Puffer reservieren, der die Daten
der 32-Bit-Bitmap temporär aufnimmt. */
DWORD dwImageSize = (DWORD)(iWidth * iHeight * 32 / 8 );
//void *pImage = HeapAlloc(GetProcessHeap(), 0, dwImageSize); // oder so
void *pImage = new BYTE[dwImageSize];
/* Als Nächstes Daten der 32-Bit-Bitmap in den Puffer laden. */
BITMAPINFO bmi =
{
sizeof(BITMAPINFOHEADER),
iWidth,
iHeight,
1,
32,
BI_RGB,
0,
0,
0,
0,
0
};
GetDIBits(hdcCompatible, hbmScreen, 0, (UINT)iHeight, pImage, &bmi, DIB_RGB_COLORS);
/* Neue Datei erstellen. */
HANDLE hFile = CreateFile(
"K:\\screenshot.bmp",
GENERIC_WRITE,
0,
NULL,
CREATE_ALWAYS,
FILE_ATTRIBUTE_NORMAL,
NULL);
if(hFile == INVALID_HANDLE_VALUE)
{
/*return */MessageBox(NULL, "CreateFile failed.", "Failure", MB_ICONERROR);
}
/* Jetzt Header für Bitmap präparieren. */
BITMAPFILEHEADER bmpfh =
{
'MB',
sizeof(BITMAPFILEHEADER),
0,
0,
sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFOHEADER)
};
/* Nun Header für Bitmap in Datei schreiben. */
DWORD dwWritten;
if(!WriteFile(hFile, &bmpfh, sizeof(BITMAPFILEHEADER), &dwWritten, NULL) || dwWritten != sizeof(BITMAPFILEHEADER))
{
/*return*/ MessageBox(NULL, "WriteFile failed.", "Failure", MB_ICONERROR);
}
if(!WriteFile(hFile, &bmi.bmiHeader, sizeof(BITMAPINFOHEADER), &dwWritten, NULL) || dwWritten != sizeof(BITMAPINFOHEADER))
{
/*return*/ MessageBox(NULL, "WriteFile failed.", "Failure", MB_ICONERROR);
}
/* Anschließend Image in Datei schreiben. */
if(!WriteFile(hFile, pImage, dwImageSize, &dwWritten, NULL) || dwWritten != dwImageSize)
{
/*return*/ MessageBox(NULL, "WriteFile failed.", "Failure", MB_ICONERROR);
}
SelectObject(hdcCompatible, hbmOldBitmap);
delete pImage;
DeleteObject(hbmScreen);
DeleteDC(hdcScreen);
DeleteDC(hdcCompatible);
//*****************************SCREENSHOT-ENDE*************************
} |
Edit:
In meiner IDE ist der anfang der funktion nicht als kommentar (nur hier im Forum ) Aber guter Tipp das mit "+++" statt ***
Zuletzt bearbeitet von homer Jay am 02.03.2005, 18:41, insgesamt 4-mal bearbeitet |
|
Nach oben |
|
|
Patrick Dark JLI Master
Anmeldedatum: 25.10.2004 Beiträge: 1895 Wohnort: Düren Medaillen: Keine
|
|
Nach oben |
|
|
HomeLess_PunkDrummer JLI Master Trainee
Alter: 36 Anmeldedatum: 28.11.2004 Beiträge: 583 Wohnort: Alter Joghurtbecher an der A4 Medaillen: Keine
|
Verfasst am: 27.02.2005, 17:43 Titel: |
|
|
Wahg bist du wahnsinnig...!
Also...du willst erst ein Screenshot der Umgebung machen, bevor das Fenster angezeigt wird, und dann quasi das Programm _scheinbar_ auf dem Desktop erscheinen lassen. Richtig?
Dann denke ich steckt makeScreenshot an der richtigen Stelle. Du musst aber den Screenshot glaub ich noch laden, oder du lässt MakeScreenshot einen Zeiger auf die gespeicherte Oberfläche zurückgeben...darf dann aber nicht lokal sein, also mit new, am besten, und dann returnen. _________________ "Was die Götter angeht, so ist es mir unmöglich, zu wissen, ob sie existieren oder nicht, noch, was ihre Gestalt sei. Die Kräfte, die mich hindern, es zu wissen, sind zahlreich, und auch ist die Frage verworren und das menschliche Leben kurz." |
|
Nach oben |
|
|
homer Jay Mini JLI'ler
Anmeldedatum: 13.01.2005 Beiträge: 12
Medaillen: Keine
|
Verfasst am: 01.03.2005, 20:48 Titel: |
|
|
HomeLess_PunkDrummer hat geschrieben:
Zitat: | Du musst aber den Screenshot glaub ich noch laden, oder du lässt MakeScreenshot einen Zeiger auf die gespeicherte Oberfläche zurückgeben... |
Wie meinst du das laden??
In der Funktion:
CPP: | void makeScreenshot(); |
wird ja der Screen erstellt (auf der HD ist dann die bmp vorhanden) und in der Funktion:
CPP: | LPDIRECTDRAWSURFACE7 CreateSurfaceFromBitmap(LPCTSTR File, int dWidth, int dHeight); |
(die ich auch gepostet habe) wird mit LoadImage() ja diese (zuvor erstellte bmp geladen)!
Oder wei meinst du das??
PS: Das prog soll von dem Screen ein Screenshot machen in bzw. bei dem es ausgeführt wird!! (also wenn zB gerade am Desktop ist dann vom Desktop...) |
|
Nach oben |
|
|
mfc++ JLI'ler
Alter: 40 Anmeldedatum: 18.02.2004 Beiträge: 163 Wohnort: Bettlä Medaillen: Keine
|
Verfasst am: 02.03.2005, 11:57 Titel: |
|
|
die bmp ist ja in dem zeitpunkt ja noch garnicht gespeichert (dauert ja ne sekunde bis die fest auf der dh ist) oder irre ich mich? und bei der funktion makescreenshot würd ich keine sterne verwenden ist ja sonst kommentar also keine funktion. ich mach immer + also //********************SREENSHOT**************************
in //++++++++++++++++++ Screenshot ++++++++++++++++++
nur ein tipp
gruss _________________ www.teslasystems.ch
|
|
Nach oben |
|
|
DirectXer Dark JLI'ler
Anmeldedatum: 05.02.2005 Beiträge: 1201 Wohnort: Köln Medaillen: Keine
|
Verfasst am: 02.03.2005, 14:21 Titel: |
|
|
Hi, ich schließe mich dem Tipp von mfc++ an...
...Ist es eigentlich Absicht, dass der erste Teil deiner makeScreenshot-Funktion als Kommentar steht? ...
Du hast nämlich nicht(unabsichtlich) // für den Kommentar, sondern /* benutzt. Denn /* hat eine höhere Priorität als //; und als du
/* Nun Speicher für einen Puffer reservieren, der die Daten
der 32-Bit-Bitmap temporär aufnimmt. */
geschrieben hast, wurde der ganze Kommentar mit */ beendet
Gruß DirectXer |
|
Nach oben |
|
|
HomeLess_PunkDrummer JLI Master Trainee
Alter: 36 Anmeldedatum: 28.11.2004 Beiträge: 583 Wohnort: Alter Joghurtbecher an der A4 Medaillen: Keine
|
Verfasst am: 02.03.2005, 15:29 Titel: |
|
|
das wäre allerdings ein seltener fehler *lol* _________________ "Was die Götter angeht, so ist es mir unmöglich, zu wissen, ob sie existieren oder nicht, noch, was ihre Gestalt sei. Die Kräfte, die mich hindern, es zu wissen, sind zahlreich, und auch ist die Frage verworren und das menschliche Leben kurz." |
|
Nach oben |
|
|
|
|
Du kannst keine Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum nicht antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen.
|
Powered by phpBB © 2001, 2005 phpBB Group Deutsche Übersetzung von phpBB.de
|