Hallo, hab mal wieder ein Problem und zwar folgendes:
In meinem Programm lassen sich über eine ComboBox verschiedene Effect Files auswählen. Die werden auch korrekt geladen und eigentlich funktioniert das Ganze so wie es soll.
Nun gibt es aber auch noch die Möglichkeit über OPENFILENAME und GetOpenFileName verschiedene Texturen auszuwählen. Auch das funktioniert eigentlich wunderbar.
Sobald ich allerdings einmal die Dialogbox zum wechseln der Textur aufgerufen habe lassen sich die EffectFiles nicht mehr laden.
Dazu muss gesagt werden, dass das GAnze auch nur dann passiert, wenn der "öffnen" Button gedrückt wird. Bei Abbrechen lassen sich die Shader auch noch weiterhin laden.
Die Dialogbox verändert im Hintergrund wohl irgendwas, was meinem Effektfile nicht passt. Das gleiche passiert auch mit einem Ifstream, der ebenfalls nicht mehr funktioniert.
Die Funktionen für das GetOpenFileName sehen folgendermaßen aus:
|
C-/C++-Quelltext
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
|
void LoadMap (HWND hwnd)
{
// welche Dateitypen sollen ausgewählt werden können
static TCHAR DateiFilter[] = TEXT ("Alle Dateien (*.*)\0*.*\0\0")\
TEXT ("Bitmap (*.BMP)\0*.bmp\0") \
TEXT ("Targa (*.TGA)\0*.tga\0") \
TEXT ("PNG (*.PNG)\0*.png\0");
ZeroMemory(&file, sizeof(OPENFILENAME));
file.lStructSize = sizeof (OPENFILENAME);
file.hwndOwner = hwnd;
file.hInstance = NULL;
file.lpstrFilter = DateiFilter;
file.lpstrCustomFilter = NULL;
file.nMaxCustFilter = 0;
file.nFilterIndex = 0;
file.lpstrFile = NULL;
file.nMaxFile = MAX_PATH;
file.lpstrFileTitle = NULL;
file.nMaxFileTitle = MAX_PATH;
file.lpstrInitialDir = NULL;
file.lpstrTitle = NULL;
file.Flags = 0;
file.nFileOffset = 0;
file.nFileExtension = 0;
file.lpstrDefExt = TEXT ("bmp");
file.lCustData = 0L;
file.lpfnHook = NULL;
file.lpTemplateName = NULL;
}
BOOL CreateDialog (HWND hwnd, PTSTR pstrFileName, PTSTR pstrTitleName)
{
file.hwndOwner = hwnd;
file.lpstrFile = pstrFileName;
file.lpstrFileTitle = pstrTitleName;
file.Flags = OFN_HIDEREADONLY;
return GetOpenFileName (&file);
}
|
So sieht der Code aus, der sich anschließend aus irgendeinem Grund nicht mehr ausführen lässt:
|
C-/C++-Quelltext
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
|
if(FAILED(temphr = D3DXCreateEffectFromFile( pDirect3DDevice, //Shader laden
c_shaderPfad,
NULL,
NULL,
NULL,
NULL,
&pEffect,
&pBufferErrors)))
{
g_pLogfile->fTextout(RED,"Fehler beim Laden des Shaders (->Konstruktur Shader.cpp)");
MessageBox(NULL,"Fehler beim Laden des Shaders","Fehler",MB_OK);
status=false;
}
if(!FAILED(temphr))
{
char buffer[256]={"\0"};
ifstream In(c_shadertxt,NULL);
if(In!=NULL)
{
while(In.getline(buffer,256,'\n'))
v_ObjectShader.push_back(buffer);
g_pLogfile->FunctionResult("Shader(TxT) eingelesen",L_OK);
}
else g_pLogfile->fTextout(RED,"Fehler beim Laden des zugehörigen TxtFiles (->Konstruktur Shader.cpp)");
}
|
Wie gesagt alles funktioniert unabhängig von einander und eigentlich tadellos, nur wenn der Dialog zum Auswählen einer Textur geöffnet wird und eine Textur mit öffnen ausgewählt wir bekomme ich das Ergebnis. Ich verwende den Dialog auch noch für andere Fälle, aber auch dort dsa gleiche Ergebnis. Aus meiner Sicht liegt es definitiv irgendwo an dem Dialog, msdn konnte mir leider nicht wirklich weiterhelfen.
Ich hoffe jemand kann mir einen Tipe geben
Gruß
falcon