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

D Discussion :

Surcouche Win32 (en D)


Sujet :

D

  1. #1
    Membre habitué

    Inscrit en
    Avril 2011
    Messages
    55
    Détails du profil
    Informations forums :
    Inscription : Avril 2011
    Messages : 55
    Points : 147
    Points
    147
    Par défaut Surcouche Win32 (en D)
    Bonjours, je cherche a créer une surcouche de Win32 permettant de créer et d'afficher une fenêtre.
    J'ai donc défini une classe Window dont le constructeur enregistre la WNDCLASS, et crée la fenêtre, et dont la méthode show permettais l'affichage :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
        Window w1 = WindowFactory.createWindow(0,0,1000,1000);
        w1.show();
    Pour augmenter la simplicitée d'utilisation, j'ai crée un thread permettant de gérer les messages envoyés par la fenetre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    protected Thread windowController;
    ...
    this.windowController = new Thread(&this.windowControllerRuntime);
    avec la windowControllerRuntime définie comme cecis :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    private void windowControllerRuntime()
    	{
    		while(this.isShown)
    		{
    			GetMessageA(&this.message, null, 0, 0);
    			TranslateMessage(&this.message);
                            DispatchMessageA(&this.message);
    		}
    	}
    La méthode show lance le thread et initialise isShown a true
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    public override void show(bool fullScreenMode = false)
    	{
    		if(fullScreenMode)
    		{
    			ShowWindow(this.window, SW_MAXIMIZE);
    		}
    		else
    		{
    		    ShowWindow(this.window, SW_SHOW);
    		}
    		this.isShown = true;
    		this.windowController.start();
    	}
    Il semble y avoir un problème dans la communication entre le thread de la boucle récupérant les messages et le thread principal, de plus lors de l’exécution la fenêtre ne répond pas.
    Ne comprenant pas vraiment ou est mon erreur et ne trouvant pas sur le net je me tourne une nouvelle fois vers vous pour vous demander ou est le problème.

    Merci d'avance.

  2. #2
    Membre éclairé

    Profil pro
    Inscrit en
    Mai 2005
    Messages
    264
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 264
    Points : 725
    Points
    725
    Par défaut
    En D2, les variables statiques et globales sont thread-local par défaut, pour les rendre partagées à tous les threads, il faut utiliser le modificateur shared. Ça ne viendrait pas de ça, par hasard ?
    "By and large I'm trying to minimize mentions of D in C++ contexts because it's as unfair as bringing a machine gun to a knife fight." - Andrei Alexandrescu

Discussions similaires

  1. utiliser les tag [MFC] [Win32] [.NET] [C++/CLI]
    Par hiko-seijuro dans le forum Visual C++
    Réponses: 8
    Dernier message: 08/06/2005, 15h57
  2. [Kylix] kylix3 ----> win32
    Par blue dans le forum EDI
    Réponses: 3
    Dernier message: 28/01/2003, 11h27
  3. gcc et win32
    Par MatRem dans le forum Autres éditeurs
    Réponses: 1
    Dernier message: 16/01/2003, 12h22
  4. [API win32] Récupérer le répertoire d'un profile
    Par sbeu dans le forum API, COM et SDKs
    Réponses: 3
    Dernier message: 27/09/2002, 12h38
  5. convertir un nom long (win32) en format dos (8+3)
    Par kylekiller dans le forum Langage
    Réponses: 2
    Dernier message: 30/08/2002, 13h34

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