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

Visual C++ Discussion :

[Win32] Problème de fenêtre transparente et DirectX


Sujet :

Visual C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2005
    Messages
    130
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 130
    Par défaut [Win32] Problème de fenêtre transparente et DirectX
    Bonjour,

    je travaille actuellement sur une application utilisant l'API Win32. Cette appli possède une fenêtre principale, et une fenêtre fille qui peut potentiellement utiliser DirectX pour l'affichage.
    Mon problème est le suivant: si je fais en sorte de rendre ma fenêtre transparente partiellement (en utilisant un style WS_EX_LAYERED, et en indiquant une couleur à rendre transparente (le but est d'avoir une fenêtre qui ne serait pas carrée, par exemple) ), la fenêtre DirectX n'est pas visible, et s'affiche n'importe comment (le déplacement de la fenêtre laisse des trainées sur l'écran).
    J'ai l'impression que Windows affiche un fond de couleur noir par défaut lorsqu'on utilise une fenêtre WS_EX_LAYERED (ce fond s'afficherait donc par dessus la fenêtre directx, la rendant invisible).

    Si je garde ma fenêtre sans transparence, tout fonctionne clairement.

    J'ai pu lire qu'il existait des problèmes entre DirectX et les fenêtres WS_EX_LAYERED. Existe t'il un moyen de contourner ça ?

    Merci d'avance

  2. #2
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    55
    Détails du profil
    Informations personnelles :
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 55
    Par défaut
    tu utilises le flag WS_EX_TRANSPARENT avec WS_EX_LAYERED?

    WS_EX_LAYERED|WS_EX_TRANSPARENT

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2005
    Messages
    130
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 130
    Par défaut
    Non, je fais ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    SetWindowLong(m_hWnd, GWL_EXSTYLE, GetWindowLong(m_hWnd, GWL_EXSTYLE) | WS_EX_LAYERED);
    SetLayeredWindowAttributes(m_hWnd, cTransparent, cAlpha, LWA_COLORKEY | LWA_ALPHA);
    cTransparent correspond à la couleur que je veux transparente, et cAlpha correspond au pourcentage de transparence que je veux sur ma fenêtre.
    Le but est d'avoir une couleur totalement transparente, et le reste de la fenêtre totalement opaque, afin d'avoir une IHM d'une forme différente que rectangulaire.


    EDIT: je viens d'essayer, si je rajoute le flag WS_EX_TRANSPARENT, je ne peux plus cliquer sur ma fenêtre, et j'ai toujours le même problème d'affichage.

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    55
    Détails du profil
    Informations personnelles :
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 55
    Par défaut
    Est rempli tu la fenetre avec ta couleur de transparence sur
    l'evenement WM_PAINT?

    normalement sur cette evenement tu recupere le hdc de ta fenetre
    et tu fais un un FoodFill(hdc,0,0,Ta_Colorref)

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2005
    Messages
    130
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 130
    Par défaut
    A vrai dire, ma fenêtre est remplie à partir d'un bitmap, dont certaines parties sont de la couleur correspondant à la transparence. Ces parties là sont censées être transparentes. Le problème, c'est que j'ai une fenêtre fille qui est censée s'afficher par dessus, et que je ne vois plus. Ce problème apparaît uniquement lorsque la fenêtre fille utilise DirectX. Autrement, cela fonctionne très bien.

  6. #6
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    55
    Détails du profil
    Informations personnelles :
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 55
    Par défaut
    pluto trop d'idée desolé
    bon courage

  7. #7
    Membre chevronné
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 464
    Par défaut
    Citation Envoyé par Reeter
    je viens d'essayer, si je rajoute le flag WS_EX_TRANSPARENT, je ne peux plus cliquer sur ma fenêtre, et j'ai toujours le même problème d'affichage.
    Ca c'est normal : lorsqu'une fenêtre a le style WS_EX_TRANSPARENT, elle ne reçoit plus les événements souris.
    Par contre je ne me rappelle plus si ceux-ci sont récupérés par l'arrière-plan ou pas...

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

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 395
    Par défaut
    Je pense qu'on peut recevoir les événements souris, fenêtre transparente ou non, en traitant le message WM_NCHITTEST : Selon l'endroit cliqué, retourner HTCLIENT, HTTRANSPARENT, DefWindowProc()...
    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 confirmé
    Profil pro
    Inscrit en
    Février 2005
    Messages
    130
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 130
    Par défaut
    ouais en même temps, c'est pas trop grave cette histoire d'évènements, vu que le problème d'affichage reste le même avec ce flag là...

  10. #10
    mat.M
    Invité(e)
    Par défaut
    Citation Envoyé par Reeter
    Si je garde ma fenêtre sans transparence, tout fonctionne clairement.
    On ne peut pas faire avec Direct X tout ce que l'on peut faire avec le GDI.
    Seul ce que permet le niveau coopératif entre les 2 systèmes.
    Direct X et ses couches outre-passent le dessin des fenêtres des boutons et des controles apparemment personne n'a encore compris cela.
    Lis bien la doc de Direct X le fichier .chm du SDK et tout ce qui concerne le niveau coopératif.
    Si Direct X a été crée c'est pour outrepasser nombre de couches ( dont celle du dessin des fenêtres et interfaces utilsateur ) pour accroitre les performances.
    Direct X a été inventé par Microsoft parce qu'avant on programmer directement l'espace de mémoire vidéo en assembleur ce qui n'est plus possible.
    Donc il ne faut pas trop compter sur les styles de fenêtres.

Discussions similaires

  1. Fenêtre transparente
    Par c-top dans le forum Agents de placement/Fenêtres
    Réponses: 16
    Dernier message: 10/10/2013, 12h33
  2. API Win32 problème de fermeture de fenêtre
    Par Ano dans le forum Windows
    Réponses: 3
    Dernier message: 13/12/2006, 21h37
  3. [WIN32]Problème de compilation.
    Par GETah dans le forum Visual C++
    Réponses: 2
    Dernier message: 29/07/2006, 11h06
  4. [Win32] Problème avec les sockets
    Par mickael777 dans le forum MFC
    Réponses: 3
    Dernier message: 12/08/2005, 11h15
  5. [MFC + Win32] Création de fenêtre
    Par nmarf dans le forum MFC
    Réponses: 2
    Dernier message: 05/07/2005, 10h25

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