|
JLI Spieleprogrammierung
|
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
Samus_Aran JLI'ler
Alter: 37 Anmeldedatum: 12.05.2004 Beiträge: 183 Wohnort: Plauen->des liegt in Sachsen in der nähe von Chemnitz und Zwickau Medaillen: Keine
|
Verfasst am: 12.07.2004, 13:05 Titel: kleine Probleme mit der überprüfung eines Filenames |
|
|
Hy Leute hier erst mal der code:
Code: |
OPENFILENAME Filename;
LPCSTR Filter = TEXT("MiddleAge Maps (*.mam)\0*.mam\0");
ZeroMemory(&Filename, sizeof(OPENFILENAME));
Filename.lStructSize = sizeof(OPENFILENAME);
Filename.hwndOwner = MainWindow_hwnd;
Filename.hInstance = MainWindow_hinstance;
Filename.lpstrFilter = Filter;
Filename.lpstrCustomFilter = NULL;
Filename.nMaxCustFilter = 0;
Filename.nFilterIndex = 0;
Filename.lpstrFile = 0;
Filename.nMaxFile = MAX_PATH;
Filename.lpstrFileTitle = NULL;
Filename.nMaxFileTitle = MAX_PATH;
Filename.lpstrInitialDir = NULL;
Filename.lpstrTitle = NULL;
Filename.Flags = OFN_HIDEREADONLY | OFN_CREATEPROMPT;
Filename.nFileOffset = 0;
Filename.nFileExtension = 0;
Filename.lpstrDefExt = TEXT ("mam");
Filename.lCustData = 0L;
Filename.lpfnHook = NULL;
Filename.lpTemplateName = NULL;
GetSaveFileName (&Filename);
MapName = ???? // is das was ich brauche;
FILE* File;
File = fopen(MapName, "wb");
|
So nun zu meiner Frage wie kann ich meiner Variable MapName den Pfad der Datei die ich gerade speicher zuweisen??? |
|
Nach oben |
|
|
Fallen JLI MVP
Alter: 40 Anmeldedatum: 08.03.2003 Beiträge: 2860 Wohnort: Münster Medaillen: 1 (mehr...)
|
Verfasst am: 12.07.2004, 13:09 Titel: |
|
|
Code: | strcpy(MapName,"A:/B/C.d"); |
_________________ "I have a Core2Quad at 3.2GHz, 4GB of RAM at 1066 and an Nvidia 8800 GTS 512 on Vista64 and this game runs like ass whereas everything else I own runs like melted butter over a smokin' hot 18 year old catholic schoolgirl's arse." |
|
Nach oben |
|
|
Samus_Aran JLI'ler
Alter: 37 Anmeldedatum: 12.05.2004 Beiträge: 183 Wohnort: Plauen->des liegt in Sachsen in der nähe von Chemnitz und Zwickau Medaillen: Keine
|
Verfasst am: 12.07.2004, 13:13 Titel: |
|
|
ne ich muss den Path irgendwie aus der Variable OPENFILENAME Filename rausbekommen weis aber nich wie. |
|
Nach oben |
|
|
The Lord of Programming Living Legend
Alter: 37 Anmeldedatum: 14.03.2003 Beiträge: 3122
Medaillen: Keine
|
Verfasst am: 12.07.2004, 14:04 Titel: |
|
|
Was ist denn OPENFILENAME für eine Struktur/Klasse/Union?
Kannst du dir nicht die Member einfach anzeigen lassen? _________________ www.visualgamesentertainment.net
Current projects: RDTDC(1), JLI-Vor-Projekt, Tetris(-Tutorial), JLI-Format
(1) Realtime Developer Testing and Debugging Console
Anschlag, Anleitung zum Atombombenbau, Sprengkörper...
Hilf Schäuble! Damit er auch was findet... |
|
Nach oben |
|
|
Jonathan_Klein Living Legend
Alter: 37 Anmeldedatum: 17.02.2003 Beiträge: 3433 Wohnort: Siegerland Medaillen: Keine
|
Verfasst am: 12.07.2004, 14:05 Titel: |
|
|
du könntest den String in ner Schleife durchlaufen lassen, bis du beimn Dateinamen bist. Müsste ja da sein wo der letzte "/" vor dem Punkt und der Dateiendung ist. Also immer speichern an welcher Stellen ein / ist und abbrechen wenn ein Punkt und die Dateiendung kommt. Dann einfach bis zur gemerkten Position kopieren und du hast den Pfad _________________ https://jonathank.de/games/ |
|
Nach oben |
|
|
Samus_Aran JLI'ler
Alter: 37 Anmeldedatum: 12.05.2004 Beiträge: 183 Wohnort: Plauen->des liegt in Sachsen in der nähe von Chemnitz und Zwickau Medaillen: Keine
|
Verfasst am: 12.07.2004, 14:15 Titel: |
|
|
@jant
des is ne member damit erstellt man n opensave dialog wie bei texteditoren beim speichern |
|
Nach oben |
|
|
Samus_Aran JLI'ler
Alter: 37 Anmeldedatum: 12.05.2004 Beiträge: 183 Wohnort: Plauen->des liegt in Sachsen in der nähe von Chemnitz und Zwickau Medaillen: Keine
|
Verfasst am: 12.07.2004, 23:11 Titel: |
|
|
wenn mir keiner hilft komm ich nich weiter kennt den neimend die member OPENFILNAME der WinAPi |
|
Nach oben |
|
|
Kampfhund Super JLI'ler
Alter: 42 Anmeldedatum: 20.07.2002 Beiträge: 408
Medaillen: Keine
|
Verfasst am: 12.07.2004, 23:20 Titel: |
|
|
In der MSDN müsste doch was dazu stehen. _________________ Kochen ist ein NP-schweres Optimierungsproblem. |
|
Nach oben |
|
|
Beni5 Super JLI'ler
Alter: 36 Anmeldedatum: 12.11.2003 Beiträge: 310 Wohnort: Switzerland Medaillen: Keine
|
Verfasst am: 12.07.2004, 23:35 Titel: |
|
|
Das Flag Filename.lpstrFile ist nicht da um mit 0 initialisiert zu werden sondern für den Pfad zuständig.
Mach ne char z.B: char MapName[MAX_PATH]; und schreibe dann Filename.lpstrFile = MapName;
Nun sollte das in deiner Variable gespeichert sein. Bei mir geht's jedenfalls.
Zitat: | wenn mir keiner hilft komm ich nich weiter kennt den neimend die member OPENFILNAME der WinAPi
|
Mir hilft auch keiner bei meinem Directx Problem... |
|
Nach oben |
|
|
Chewie Super JLI'ler
Anmeldedatum: 17.07.2003 Beiträge: 382
Medaillen: Keine
|
Verfasst am: 13.07.2004, 00:37 Titel: |
|
|
na die datei mit pfad steht dann wieder in lpstrFile von der OPENFILENAME struktur drinnen. die struktur wird als initialisierung und rückgabewert verwendet.
was dir fehlt, sollte also etwa so aussehen:
Code: |
...
GetSaveFileName(&Filename);
char MapName[128];
strcpy(MapName, Filename.lpstrFile);
FILE* File = fopen(MapName, "wb");
|
|
|
Nach oben |
|
|
Samus_Aran JLI'ler
Alter: 37 Anmeldedatum: 12.05.2004 Beiträge: 183 Wohnort: Plauen->des liegt in Sachsen in der nähe von Chemnitz und Zwickau Medaillen: Keine
|
Verfasst am: 13.07.2004, 08:36 Titel: |
|
|
geht immer noch net wies scheint is was davor kaput oder nich in ordnug ich poste mal den ganzen code der Main
Code: |
#ifndef MAIN_H
#define MAIN_H
#pragma warning(disable : 4786)
/////////////////////////////////////////////////
//Die Includes
#include <windows.h>
#include <iostream>
#include "resource.h"
#include "..\Core\cGraphic.h"
#include "..\Core\cMap.h"
#include "cSet.h"
/////////////////////////////////////////////////
//Die Variablen
//Fensterhandle und ihre Instance
HWND MainWindow_hwnd = NULL;
HINSTANCE MainWindow_hinstance = NULL;
HWND TileSet_hwnd = NULL;
HINSTANCE TileSet_hinstance = NULL;
HWND ObjektSet_hwnd = NULL;
HINSTANCE ObjektSet_hinstance = NULL;
//Der FileHandle
OPENFILENAME Filename;
//Abfrage ob die jeweiligen Fenster aktiv sind
bool TileSetActive = false;
bool ObjektSetActive = false;
//Die Klassen
cGraphic MainWindow_Graphic; //Grafik des Haubtfensters
cGraphic TileSet_Graphic; //Grafik des Tilesetfensters
cGraphic ObjektSet_Graphic; //Grafik des Objektfensters
cManager Main_Manager; //Der Resourcenmanager für das Haubtfenster
cManager TileSet_Manager; //Der Resourcenmanager für das TileSetfenster
cManager ObjektSet_Manager; //Der Resourcenmanager für das ObjektSetfenster
cMap Main_Map; //Die Karte
cSet TileSet_Set; //Das TileSet
cSet ObjektSet_Set; //Das ObjektSet
//Die Variablen
int Texture; //Die Texture mit der man gerade malt
char* MapName; //Der Name der Karte
/////////////////////////////////////////////////
//Die Prototypen
//Die WinMain
int WINAPI WinMain(HINSTANCE hinstance, HINSTANCE hprevinstance, LPSTR cmdline, int showcmd);
//Die Grundfunktionen
void Init(void);
void Shutdown(void);
void Main(void);
/*Die Fenster erstellen*/
//Das Haubtfenster
HWND MainWindow_Create(void);
//Der MessageHandler des Haubtfensters
LRESULT CALLBACK MainWindow_Window(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam);
//Das TileSetfenster
HWND TileSet_Create(void);
//Der MessageHandler des TileSetfensters
LRESULT CALLBACK TileSet_Window(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam);
//Das ObjektSetfenster
HWND ObjektSet_Create(void);
//Der MessageHandler des ObjektSetfensters
LRESULT CALLBACK ObjektSet_Window(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam);
#endif MAIN_H
|
Code: |
/////////////////////////////////////////////////
//Die Includes
#include "Main.h"
/////////////////////////////////////////////////
//Die WinMain
// Windows main-Funktion
int WINAPI WinMain(HINSTANCE hinstance, HINSTANCE hprevinstance, LPSTR cmdline, int showcmd)
{
//Initialisieren
Init();
MSG msg = {0};
while(msg.message != WM_QUIT)
{
if(PeekMessage(&msg,NULL,0,0,PM_REMOVE))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
else
{
Main();
}
}
Shutdown();
return 0;
}
/////////////////////////////////////////////////
//Die Fenster
/*Das Haubtfenster*/
//Das Haubtfenster
HWND MainWindow_Create(void)
{
WNDCLASSEX mainwnd;
mainwnd.cbSize = sizeof(WNDCLASSEX);
mainwnd.style = CS_DBLCLKS | CS_OWNDC |CS_HREDRAW | CS_VREDRAW;
mainwnd.lpfnWndProc = MainWindow_Window;
mainwnd.cbClsExtra = 0;
mainwnd.cbWndExtra = 0;
mainwnd.hInstance = MainWindow_hinstance;
mainwnd.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);
mainwnd.hCursor = LoadCursor(NULL, IDC_ARROW);
mainwnd.lpszMenuName = "MAIN";
mainwnd.lpszClassName = "WindowClass1";
mainwnd.hIcon = LoadIcon(NULL, IDI_WINLOGO);
mainwnd.hIconSm = LoadIcon(NULL, IDI_WINLOGO);
RegisterClassEx(&mainwnd);
return CreateWindowEx(NULL,
"WindowClass1",
"MiddleAge MapEditor",
WS_OVERLAPPEDWINDOW |
WS_VISIBLE,
150,
150,
800,
600,
NULL,
NULL,
MainWindow_hinstance,
NULL);
}
//Der MessageHandler des Haubtfensters
LRESULT CALLBACK MainWindow_Window(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
switch(msg)
{
case WM_CREATE:
{
LPCSTR Filter = TEXT("MiddleAge Maps (*.mam)\0*.mam\0");
ZeroMemory(&Filename, sizeof(OPENFILENAME));
Filename.lStructSize = sizeof(OPENFILENAME);
Filename.hwndOwner = MainWindow_hwnd;
Filename.hInstance = MainWindow_hinstance;
Filename.lpstrFilter = Filter;
Filename.lpstrCustomFilter = NULL;
Filename.nMaxCustFilter = 0;
Filename.nFilterIndex = 0;
Filename.lpstrFile = 0;
Filename.nMaxFile = MAX_PATH;
Filename.lpstrFileTitle = NULL;
Filename.nMaxFileTitle = MAX_PATH;
Filename.lpstrInitialDir = NULL;
Filename.lpstrTitle = NULL;
Filename.Flags = OFN_HIDEREADONLY | OFN_CREATEPROMPT;
Filename.nFileOffset = 0;
Filename.nFileExtension = 0;
Filename.lpstrDefExt = TEXT ("mam");
Filename.lCustData = 0L;
Filename.lpfnHook = NULL;
Filename.lpTemplateName = NULL;
}
break;
case WM_DESTROY:
{
PostQuitMessage(0);
return 0;
}
break;
case WM_COMMAND:
{
switch(wParam)
{
case ID_DATEI_NEUEKARTE:
{
Main_Map.ResetTileSet();
MapName = "";
}
break;
case ID_DATEI_KARTELADEN:
{
GetOpenFileName (&Filename);
//Den Mapname setzen
strcpy(MapName, Filename.lpstrFile);
//Zu ladende Dinge hier hin//
//Ende des Laden//
}
break;
case ID_DATEI_KARTESPEICHERN:
{
if(MapName == "")
{
GetSaveFileName (&Filename);
}
//Zu speichernden Dinge hier hin//
//Ende des Speichern//
}
break;
case ID_DATEI_KARTESPEICHERNALS:
{
GetSaveFileName (&Filename);
//Den Mapname setzen
strcpy(MapName, Filename.lpstrFile);
//Zu speichernden Dinge hier hin//
FILE* File;
File = fopen(MapName, "wb");
//Die Texturen Speichern
for(int x = 0; x < 64; x++)
{
for(int y = 0; y < 16; y++)
{
int texture = Main_Map.GetTexture(x, y);
fwrite(&texture, sizeof(int), 1, File);
}
}
fclose(File);
//Ende des Speichern//
}
break;
case ID_DATEI_BEENDEN:
{
DestroyWindow(MainWindow_hwnd);
}
break;
case ID_TOOLS_TILESETNDERN:
{
}
break;
case ID_TOOLS_KARTENEIGENSCHAFTEN:
{
}
break;
case ID_FENSTER_TILESET:
{
if(TileSetActive == false)
{
TileSetActive = true;
TileSet_hwnd = TileSet_Create();
}
else
{
TileSetActive = false;
DestroyWindow(TileSet_hwnd);
}
}
break;
case ID_FENSTER_OBJEKTE:
{
if(ObjektSetActive == false)
{
ObjektSetActive = true;
ObjektSet_hwnd = ObjektSet_Create();
}
else
{
ObjektSetActive = false;
DestroyWindow(ObjektSet_hwnd);
}
}
break;
}
}
break;
case WM_LBUTTONDOWN:
{
POINT p;
p.x = LOWORD(lParam);
p.y = HIWORD(lParam);
Main_Map.Collision(p, Texture);
}
break;
case WM_KEYDOWN:
{
switch(wParam)
{
case VK_LEFT:
{
Main_Map.Scroll(-1);
}
break;
case VK_RIGHT:
{
Main_Map.Scroll(1);
}
break;
}
}
break;
}
return(DefWindowProc(hWnd, msg, wParam, lParam));
}
//Das TileSetfenster
HWND TileSet_Create(void)
{
WNDCLASSEX tilewnd;
tilewnd.cbSize = sizeof(WNDCLASSEX);
tilewnd.style = CS_DBLCLKS | CS_OWNDC |CS_HREDRAW | CS_VREDRAW;
tilewnd.lpfnWndProc = TileSet_Window;
tilewnd.cbClsExtra = 0;
tilewnd.cbWndExtra = 0;
tilewnd.hInstance = TileSet_hinstance;
tilewnd.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);
tilewnd.hCursor = LoadCursor(NULL, IDC_ARROW);
tilewnd.lpszMenuName = NULL;
tilewnd.lpszClassName = "WindowClass2";
tilewnd.hIcon = LoadIcon(NULL, IDI_WINLOGO);
tilewnd.hIconSm = LoadIcon(NULL, IDI_WINLOGO);
RegisterClassEx(&tilewnd);
return CreateWindowEx(NULL,
"WindowClass2",
"TileSet",
WS_OVERLAPPEDWINDOW |
WS_VISIBLE,
800,
150,
320,
240,
MainWindow_hwnd,
NULL,
TileSet_hinstance,
NULL);
}
//Der MessageHandler des TileSetfensters
LRESULT CALLBACK TileSet_Window(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
switch(msg)
{
case WM_CREATE:
{
TileSet_Graphic.Init(hWnd, 320, 240, true);
TileSet_Manager.Init(TileSet_Graphic.GetDevice());
TileSet_Set.Init(TileSet_Graphic.GetDevice(), &TileSet_Manager, 10, 5);
}
break;
case WM_DESTROY:
{
TileSetActive = false;
}
break;
case WM_LBUTTONDOWN:
{
POINT p;
p.x = LOWORD(lParam);
p.y = HIWORD(lParam);
if(TileSet_Set.Collision(p) != -1)
{
Texture = TileSet_Set.Collision(p);
}
}
break;
}
return(DefWindowProc(hWnd, msg, wParam, lParam));
}
//Das ObjektSetfenster
HWND ObjektSet_Create(void)
{
WNDCLASSEX objectwnd;
objectwnd.cbSize = sizeof(WNDCLASSEX);
objectwnd.style = CS_DBLCLKS | CS_OWNDC |CS_HREDRAW | CS_VREDRAW;
objectwnd.lpfnWndProc = ObjektSet_Window;
objectwnd.cbClsExtra = 0;
objectwnd.cbWndExtra = 0;
objectwnd.hInstance = ObjektSet_hinstance;
objectwnd.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);
objectwnd.hCursor = LoadCursor(NULL, IDC_ARROW);
objectwnd.lpszMenuName = NULL;
objectwnd.lpszClassName = "WindowClass3";
objectwnd.hIcon = LoadIcon(NULL, IDI_WINLOGO);
objectwnd.hIconSm = LoadIcon(NULL, IDI_WINLOGO);
RegisterClassEx(&objectwnd);
return CreateWindowEx(NULL,
"WindowClass3",
"ObjektSet",
WS_OVERLAPPEDWINDOW |
WS_VISIBLE,
800,
390,
320,
240,
MainWindow_hwnd,
NULL,
ObjektSet_hinstance,
NULL);
}
//Der MessageHandler des ObjektSetfensters
LRESULT CALLBACK ObjektSet_Window(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
switch(msg)
{
case WM_CREATE:
{
ObjektSet_Graphic.Init(hWnd, 320, 240, true);
}
break;
case WM_DESTROY:
{
ObjektSetActive = false;
}
break;
}
return(DefWindowProc(hWnd, msg, wParam, lParam));
}
/////////////////////////////////////////////////
//Das Haubtprogramm
void Init(void)
{
MainWindow_hwnd = MainWindow_Create();
MainWindow_Graphic.Init(MainWindow_hwnd, 800, 600, true);
Main_Manager.Init(MainWindow_Graphic.GetDevice());
Main_Map.Init(MainWindow_Graphic.GetDevice(), &Main_Manager);
MapName = "";
}
void Shutdown(void)
{
}
void Main(void)
{
//Begin
MainWindow_Graphic.BeginScene();
if(TileSetActive == true)
{
TileSet_Graphic.BeginScene();
}
if(ObjektSetActive == true)
{
ObjektSet_Graphic.BeginScene();
}
//Begin TODO
/*Die Map malen*/
Main_Map.Draw();
/*Das TileSet malen*/
if(TileSetActive == true)
{
TileSet_Set.Draw();
}
/*Das ObjektSet malen*/
if(ObjektSetActive == true)
{
}
//End TODO
//End
MainWindow_Graphic.Endscene();
if(TileSetActive == true)
{
TileSet_Graphic.Endscene();
}
if(ObjektSetActive == true)
{
ObjektSet_Graphic.Endscene();
}
}
|
So vieleicht hilft das |
|
Nach oben |
|
|
Beni5 Super JLI'ler
Alter: 36 Anmeldedatum: 12.11.2003 Beiträge: 310 Wohnort: Switzerland Medaillen: Keine
|
Verfasst am: 13.07.2004, 08:56 Titel: |
|
|
Code: | Filename.lpstrFile = 0; |
Ich denke wenn du es mit 0 initialisierst enthält es auch keinen Pfad
Übergib hier ne char (bsp. char MapName[MAX_PATH] ).. Hab ich schon oben erwähnt |
|
Nach oben |
|
|
Samus_Aran JLI'ler
Alter: 37 Anmeldedatum: 12.05.2004 Beiträge: 183 Wohnort: Plauen->des liegt in Sachsen in der nähe von Chemnitz und Zwickau Medaillen: Keine
|
Verfasst am: 14.07.2004, 09:19 Titel: |
|
|
Ich habs alleine rausgefunden trotzdem vielen Danke für die Hilfeversuche
für alle WinAPI leute www.winapi.net da gibts gute Tuts und code |
|
Nach oben |
|
|
PeaceKiller JLI Master
Alter: 36 Anmeldedatum: 28.11.2002 Beiträge: 970
Medaillen: Keine
|
Verfasst am: 14.07.2004, 12:24 Titel: |
|
|
Wäre net wenn du noch sagen könntest was der Fehler war. _________________ »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 |
|
|
Samus_Aran JLI'ler
Alter: 37 Anmeldedatum: 12.05.2004 Beiträge: 183 Wohnort: Plauen->des liegt in Sachsen in der nähe von Chemnitz und Zwickau Medaillen: Keine
|
Verfasst am: 14.07.2004, 13:22 Titel: |
|
|
joha könnt ich machen.
Also ich habe die abgeleitete Instance der OPENFILENAME Member (Filename) zwar Initialisiert aber vergessen den
Filename.lpstrFile und den Filename.lpstrTitle richtig zu setzen bevor ich
Die Dialogbox per GetSaveFileName(...) aufrufe
hier mal der code
Code: |
case ID_DATEI_KARTESPEICHERNALS:
{
Filename.hwndOwner = hWnd;
Filename.lpstrFile = FileName;
Filename.lpstrFileTitle = TitleName;
Filename.Flags = OFN_HIDEREADONLY | OFN_CREATEPROMPT;
GetSaveFileName (&Filename);
//Speichern starten
//Speichern beenden
}
|
Verstanden??? |
|
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
|