Bonjour,
J'ai écrit un programme utilisant la SDL2(SDL2.lib, SDL2main.lib, SDL2_image.lib et SDL2_ttf.lib) pour simuler un editBox. Ça fonctionnait très bien jusqu'au rajout d'une fonction pour ouvrir un fichier dans l'explorer.
C'est précisément après avoir cliqué sur Ouvrir que ma police LucidaSansRegular.ttf n'est plus reconnue: TTF_GetError() renvoi "couldn't open xxx.ttf".
J'ai cherché à résoudre le problème par diverses manières : créer une nouvelle thread exécutant l'ouverture/sélection du fichier, avec des events win32 et Sdl mais je n'ai pas réussi à résoudre le problème.
Voici la fonction qui me permet de récupéré le nom du fichier ouvert et celle qui récupère du texte à afficher :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 void CMain::changeDirectoryPath() { OPENFILENAME ofn; TCHAR szFile[MAX_PATH]; ZeroMemory(&ofn, sizeof(ofn)); ofn.lStructSize = sizeof(ofn); ofn.lpstrFile = szFile; ofn.lpstrFile[0] = '\0'; ofn.hwndOwner = NULL; ofn.nMaxFile = sizeof(szFile); ofn.lpstrFilter = TEXT("Text Files\0*.txt\0Any File\0*.*\0"); ofn.nFilterIndex = 1; ofn.lpstrTitle = TEXT("Select dictionary"); ofn.lpstrInitialDir = L"data\\dictionary"; ofn.Flags = OFN_DONTADDTORECENT | OFN_FILEMUSTEXIST; if(GetOpenFileName(&ofn)) { OutputDebugString(ofn.lpstrFile); int cSize = WideCharToMultiByte (CP_ACP, 0, ofn.lpstrFile, wcslen(ofn.lpstrFile), NULL, 0, NULL, NULL); string output(static_cast<size_t>(cSize), '\0'); WideCharToMultiByte (CP_ACP, 0, ofn.lpstrFile, wcslen(ofn.lpstrFile), reinterpret_cast<char*>(&output[0]), cSize, NULL, NULL); cout<<output<<endl; } cdpOn = false; }Est-ce que vous sauriez pourquoi je ne peux plus ré-ouvrir ma police après avoir sélectionné un fichier et comment résoudre le problème?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 bool CDictionary::loadFromRenderedText(std::string textureText) { if(Message!=NULL) { SDL_DestroyTexture(Message); Message = NULL; TTF_CloseFont(font); } font = TTF_OpenFont(filePath.c_str(), policeSize); if(!font) { cout<<"TTF_OpenFont: "<<TTF_GetError()<<endl; return 0; } textSurface = TTF_RenderText_Solid(font, textureText.c_str(), textColor); if(textSurface != NULL) { Message = SDL_CreateTextureFromSurface(renderer, textSurface); if(Message==NULL) { printf("Unable to create texture from rendered text! SDL Error: %s\n", SDL_GetError()); } else { position.x=50; position.y=50; position.w=textSurface->w; position.h=textSurface->h; } SDL_FreeSurface(textSurface); } else { printf("Unable to render text surface! SDL_ttf Error: %s\n", TTF_GetError() ); } return Message != NULL; }
Merci d'avance
Partager