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

Windows Discussion :

Win32 - Fenetre qui clignotte


Sujet :

Windows

  1. #1
    Membre éclairé
    Avatar de buzzkaido
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juillet 2004
    Messages
    821
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2004
    Messages : 821
    Points : 734
    Points
    734
    Par défaut Win32 - Fenetre qui clignotte
    Bonjour,

    Malgré le titre, il ne s'agit pas d'uin probleme de double-buffer.

    Enfin, je crois pas.

    Voila mon souci : j'ai developpé un plugin pour une application.

    Cette application fourni une fenetre par defaut pour mon plugin (la fenetre principale du plugin)

    Ensuite, je crée et j'ouvre d'autres fenetres (des popups de configs...) depuis cette fenetre principale.

    J'ai donc une classe qui gere mes fenetres, avec le traitement des messages, le dessni en double-buffering, etc...

    Mais à chaque fois que j'ouvre une fenetre popup pour la premiere fois, tout mon bureau et toutes mes fenetres sont redessinées !

    Ce qui produit un effet pas tres agréable....

    Par contre, si je ferme une popup et que je la ré-ouvre, ça ne clignotte pas.

    Auriez-vous une idée à propos de ce problème ?

    Voici le code que j'utilise :

    Création de la WindowClass :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    m_WC.style			    = CS_DBLCLKS;
    m_WC.lpfnWndProc	            = gestionMessagesStatic;
    m_WC.cbClsExtra		            = 0;
    m_WC.cbWndExtra		            = 0;
    m_WC.hInstance		            = (HINSTANCE) hInstance;
    m_WC.hIcon			    = NULL;
    m_WC.hCursor		            = LoadCursor(NULL, IDC_ARROW);
    m_WC.hbrBackground	            = NULL;
    m_WC.lpszMenuName	            = NULL;
    m_WC.lpszClassName	            = "maClasse";
    	
    RegisterClass(&m_WC);
    Création et ouverture de la fenetre :
    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
    m_HWND = CreateWindowEx(WS_EX_TOOLWINDOW,
                            "maClasse",
                            m_titre,
                            WS_POPUP,
                            m_positionX,
                            m_positionY,
                            m_surface.largeur,
                            m_surface.hauteur,
                            NULL,
                            NULL,
                            (HINSTANCE) hInstance,
                            (void *)this);
        
    ShowWindow(m_HWND, SW_SHOW);
    Fermeture et auto-destruction de la fenetre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    DestroyWindow(m_HWND);
    SetWindowLongPtr(m_HWND, GWL_USERDATA, NULL);
    m_fenetreOuverte = false;
    if (m_autoDestruction) delete this;

  2. #2
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    Je ne pense pas que le fait de redessiner tout le bureau soit lié à ton double-buffering, à moins que tu fasses des trucs vraiment bizarres avec InvalidateRect()...

    Par contre, ta popup, elle a bien ta fenêtre comme parent ?
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  3. #3
    Membre éclairé
    Avatar de buzzkaido
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juillet 2004
    Messages
    821
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2004
    Messages : 821
    Points : 734
    Points
    734
    Par défaut
    Je ne pense pas non plus que ce soit lié à mon buffering.

    En plus, tous mes InvalidateRect ont bien un rectangle de preciser, jamais NULL.

    Par contre, non, ma popup n'a pas ma fenetre principale comme parent...

    Ca a une importance ?

    Je ne suis pas hyper-familier de la programmation des fenetres sous windows, alors si tu veux bien m'eclairer un peu sur les relations parent-enfant et fenetre principak-fenetre popup, ce serait cool !

  4. #4
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    Ben oui, ça a une importance.
    Une popup (je suppose que par "popup" du veut dire fenêtre modale, comme par exemple une MessageBox()) fait un EnableWindow(false) sur sa fenêtre parent, qui n'est pas supposée être le bureau (sauf peut-être si tu n'as pas de fenêtre du tout dans le thread courant).

    Enfin bref, il est possible que ta popup fasse redessiner le bureau justement parce que tu ne lui as pas donné de parent. Essaie en lui en donnant un (le plus logique)...
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  5. #5
    Membre éclairé
    Avatar de buzzkaido
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juillet 2004
    Messages
    821
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2004
    Messages : 821
    Points : 734
    Points
    734
    Par défaut
    Oui, effectivement, je n'ai pas pensé à ça.

    Mais je precise que mes fenetre ne sont pas modales.

    C'est plus comme des palettes d'outils flottantes.

    En tout cas, je vais essayer.

    Tant que j'y suis, une autre question : y-a-t-il mieux que mon code pour fermer et detruire une fenetre ?

    L'appel à DestroyWindow ne rend la main qu'après destruction de la fenetre ?

    Merci !

  6. #6
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    Si une palette d'outil est flottante, alors elle flotte au-dessus de son [edit]Owner[/edit].
    Ou sinon, c'est le bordel, comme sous le GIMP.

    Généralement, je mets le userdata à NULL dans le traitement du message WM_DESTROY ou WM_NCDESTROY (ces messages sont reçus PENDANT le DestroyWindow()).
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  7. #7
    Membre éclairé
    Avatar de buzzkaido
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juillet 2004
    Messages
    821
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2004
    Messages : 821
    Points : 734
    Points
    734
    Par défaut
    Ou sinon, c'est le bordel, comme sous le GIMP
    Effectivement, c'est un des soucis dont je suis en train de me rendre compte. Si j'ouvre plus de 3-4 fenetres d'outils, l'interface devient un vrai foutoir...

    Généralement, je mets le userdata à NULL dans le traitement du message WM_DESTROY ou WM_NCDESTROY (ces messages sont reçus PENDANT le DestroyWindow()).
    Oui, c'est vrai que c'est surement mieux...

    Dans le WM_DESTROY, je fais aussi un PostQuitMessage(0);

    Est-ce que je dois bien le faire pour chaque fenetre ou uniquement pour la fenetre principale ?

    J'ai pas tres bien compris si cela servait à fermer nue fenetre ou une application...

  8. #8
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    PostQuitMessage() sert à terminer la boucle de message, donc :
    • soit ça se met uniquement dans la fenêtre principale,
    • soit tu mets en place un système de comptage de fenêtres (de préférence avec une tolérance au cas où l'on fermerait la seule fenêtre juste avant d'en ouvrir une autre. Un PostThreadMessage() avec un message personnel peut être pas mal dans ces cas-là).


    PS: Mes doigts on fourché pour "fenêtre parent". Sous Windows, il y a deux relations de parenté différentes : Parent et Owner. Seules les fenêtres "enfant" (WS_CHILD) ont un Parent, les fenêtres popup ont un Owner (et flottent toujours "par-dessus" celui-ci).
    Quand une fenêtre est détruite, toutes ses fenêtres filles le sont aussi. Mais je ne sais plus si c'est le cas pour les fenêtres Owned...
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  9. #9
    Membre éclairé
    Avatar de buzzkaido
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juillet 2004
    Messages
    821
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2004
    Messages : 821
    Points : 734
    Points
    734
    Par défaut
    Merci pour les reponses !

    Pour le PostQuiMessage, je vais corriger ça.

    Par contre pour la creation de fenetre, la doc de CreateWindowEx indique :

    hWndParent
    [in] Handle to the parent or owner window of the window being created. To create a child window or an owned window, supply a valid window handle. This parameter is optional for pop-up windows.
    Or ma fenetre est une PopUp non ?

    Je n'ai donc pas l'obligation de lui fournir un parent/owner ?

  10. #10
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    En effet, dans ce cas ce sera une fenêtre indépendante.
    Mais il ne devrait pas vraiment y avoir de problème : Au début, je pensais que la fenêtre était modale, et là ça pouvait être méchant.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  11. #11
    Membre éclairé
    Avatar de buzzkaido
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juillet 2004
    Messages
    821
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2004
    Messages : 821
    Points : 734
    Points
    734
    Par défaut
    D'où peut donc venir le fait que TOUTES les fenetres (bureau, autres applications...) sont redessinées lorsque j'ouvre une de ces popup POUR LA PREMIERE FOIS (pas si je la ferme et la re-ouvre)

    J'ai essayé mon plugin dans d'autres logiciels, meme comportement, je ne pense donc pas que cela vienne du logiciel hôte....

    Là, je suis un peu perdu !

  12. #12
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    Fais-tu des trucs spéciaux dans ton traitement de WM_CREATE ?
    Des trucs genre chargement de DLL, etc.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  13. #13
    Membre éclairé
    Avatar de buzzkaido
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juillet 2004
    Messages
    821
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2004
    Messages : 821
    Points : 734
    Points
    734
    Par défaut
    Voici ma procedure de traitement de message statique :

    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
    LRESULT CALLBACK cGuiFenetre::gestionMessagesStatic(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
    {
    	cGuiFenetre* instanceFenetre;
    
    	if (uMsg == WM_NCCREATE)
        {
            SetWindowLongPtr(hwnd, GWL_USERDATA, (LONG_PTR)((LPCREATESTRUCT(lParam))->lpCreateParams));
        }
    
    	instanceFenetre = (cGuiFenetre *) GetWindowLongPtr(hwnd, GWL_USERDATA);
    
    
    	if (instanceFenetre)
    	{
    		return instanceFenetre->gestionMessages(hwnd, uMsg, wParam, lParam);
    	}
    	else
    	{
    		return DefWindowProc(hwnd, uMsg, wParam, lParam);
    	}
    }
    Et dans la fonction "gestionMessage" de l'instance de la fenetre, je fais :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    		
    case WM_CREATE:
        evenement.m_type = GUI_EV_FENETRE_OUVERTURE;
        traiterEvenement(&evenement);
        return (LRESULT) 0;
    Donc non, rien de particulier, je crois

  14. #14
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    Et le traitement de l'événement ne fait rien de particulier ?

    PS: En théorie, tu dois utiliser GWLP_USERDATA.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  15. #15
    Membre éclairé
    Avatar de buzzkaido
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juillet 2004
    Messages
    821
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2004
    Messages : 821
    Points : 734
    Points
    734
    Par défaut
    Non, je met juste un flag à true pour dire que la fenetre est ouverte.

    GWLP_USERDATA : j'utiliserais ça dorenavant.

    Sinon, je pense à un truc, toutes mes fenetres utilisent la meme Window Class.

    Ca ne pose pas de probleme ?

    Et d'une maniere generale, quelle action peut conduire à redessiner l'ensemble de toutes les fenetres ?

  16. #16
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    Pour le coup de la WindowClass, ça ne devrait pas poser de problème, et surtout pas pour les fenêtres qui ne sont pas les tiennes.

    D'une manière générale, ce qui peut faire redessiner les fenêtres, ce sont surtout des modifications des paramètres système, ou des trucs qui touchent de trop près au desktop...
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  17. #17
    Membre éclairé
    Avatar de buzzkaido
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juillet 2004
    Messages
    821
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2004
    Messages : 821
    Points : 734
    Points
    734
    Par défaut
    Hum, bon, bein ça reste un mystère entier, pour moi...

    La création d'une Window Class n'entre pas dans la catégorie des "paramètres système" pouvant entrainer un redessinement de toutes les fenetres ?

    Dans ce cas, je ne dois vraiment pas chercher au bon endroit...

    Merci pour tes réponses, toujours aussi nombreuses et utiles !

  18. #18
    Membre éclairé
    Avatar de buzzkaido
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juillet 2004
    Messages
    821
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2004
    Messages : 821
    Points : 734
    Points
    734
    Par défaut
    Maintenant que j'y pense, le seul truc "un peu special" que je fais (à mon sens, en tout cas) :


    Cette fonction me sert à mesurer un texte avant de l'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
    cGuiSurface cSkinFont::mesurerTexte(cGuiSurface surface, LPCSTR texte, UINT format)
    {
       cGuiSurface  s;
       RECT         rc;
       HDC          hdcTemp;
       HGDIOBJ      ancienObjet;
    
       rc          = surface.rectangle();
       hdcTemp     = GetDC(NULL);
       ancienObjet = SelectObject(hdcTemp, m_font);
       DrawText(hdcTemp, texte, -1, &rc, format|DT_CALCRECT);
       SelectObject(hdcTemp, ancienObjet);
       ReleaseDC(NULL, hdcTemp);
    	
       s.x         = rc.left;
       s.y         = rc.top;
       s.largeur   = rc.right - rc.left;
       s.hauteur   = rc.bottom - rc.top;
    
       return s;
    }
    Et peut-etre aussi le fait que chaque fenetre ouverte crée une instance d'une class cContexteGraphique, qui gere toutes les fonctions d'affichage (Blt, fillrect...).

    Cette classe utilise les ressources chargées dans une instance statique de la classe cSkin. Cette instance de classe est statique pour n'etre chargée qu'une fois et partagée entre toutes les fenetres.

    Je ne sais pas si c'est une piste, mais voila...

  19. #19
    Expert éminent sénior
    Avatar de Mat.M
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2006
    Messages
    8 361
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2006
    Messages : 8 361
    Points : 20 381
    Points
    20 381
    Par défaut
    Citation Envoyé par buzzkaido
    Cette application fourni une fenetre par defaut pour mon plugin (la fenetre principale du plugin)
    un "plugin" pour moi c'est vague : est-ce que c'est unel dll "classique" ou objet ATL-COM ?
    Est-ce qu'il y a une accélération graphique particulière utilisée ( open GL, Direct X...?)

  20. #20
    Membre éclairé
    Avatar de buzzkaido
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juillet 2004
    Messages
    821
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2004
    Messages : 821
    Points : 734
    Points
    734
    Par défaut
    Le plugin est une dll.

    Et aucune acceleration graphique. Tout est en Win32 + GDI.

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. [WIN32] fenetre fille au 1er plan
    Par Grulim dans le forum MFC
    Réponses: 3
    Dernier message: 31/01/2006, 18h07
  2. (win32) Fenetre fille avec scrollbar
    Par xeland dans le forum Windows
    Réponses: 4
    Dernier message: 11/11/2005, 10h05
  3. Fenetre qui ferme l'application
    Par pitistef dans le forum MFC
    Réponses: 3
    Dernier message: 04/09/2005, 19h00
  4. Api Win32 : boutons "qui bougent" au passage de la
    Par Spartan03 dans le forum Windows
    Réponses: 9
    Dernier message: 06/06/2005, 23h52
  5. fenetre qui fuit la souris
    Par Nurs dans le forum C++Builder
    Réponses: 4
    Dernier message: 02/11/2004, 23h58

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