IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++ Discussion :

Openfilename et SDL2


Sujet :

C++

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Décembre 2011
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Décembre 2011
    Messages : 4
    Points : 6
    Points
    6
    Par défaut Openfilename et SDL2
    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;
    }
    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;
    }
    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?
    Merci d'avance

  2. #2
    Membre éclairé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2010
    Messages
    517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Santé

    Informations forums :
    Inscription : Avril 2010
    Messages : 517
    Points : 718
    Points
    718
    Par défaut
    Salut,

    As-tu simplement essayé de débuger ou au moins vérifier le chemin de ta nouvelle font? Ne faut-il pas fermer la font précédente avant d'en ouvrir une autre?

    Sinon, il est plus pratique de ne mettre que le code concerné est pas toute tes différentes méthodes (inutiles pour ton problème).

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Décembre 2011
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Décembre 2011
    Messages : 4
    Points : 6
    Points
    6
    Par défaut
    Merci pour ta réponse Darkman19320,
    J'ai édité mon premier message et réduit le code.

    Oui... j'ai essayé de déboguer mon programme, c'est bien pour ça d’ailleurs que j'été en mesure de dire que ma font ne se rouvre pas juste après avoir cliqué sur le bouton Open et que la fenêtre du CommonDialog se soit fermée. Je ferme puis rouvre la même font avec le même chemin absolu et la même taille de police. Non le chemin n'est pas altéré après l'ouverture du fichier.


    EDIT : Quelqu'un m'a expliqué la raison du dysfonctionnement alors je tenais à revenir ici pour partager son explication si quelqu'un avait le même soucis : si un fichier est ouvert avec GetOpenFileName, le programme change le répertoire de travail et le relocalise là où le fichier ouvert se trouve. J'ai donc pu résoudre mon problème en implémentant SetCurrentDirectory() à la sortie de ma fonction changeDirectoryPath().

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Openfilename
    Par Fry dans le forum Windows
    Réponses: 2
    Dernier message: 03/05/2006, 11h50
  2. OPENFILENAME
    Par Mat 74 dans le forum Windows
    Réponses: 1
    Dernier message: 03/02/2006, 15h27
  3. [VB]Problème de focus fenêtre get.openfilename
    Par alexxx69 dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 01/02/2006, 10h22
  4. [debutant VC++ et C++] Windows form et OPENFILENAME
    Par Le Scandinave dans le forum MFC
    Réponses: 5
    Dernier message: 08/03/2005, 15h31
  5. [API] OpenFilename
    Par DelphiCool dans le forum API, COM et SDKs
    Réponses: 2
    Dernier message: 24/08/2002, 18h26

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo