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 :

[MFC] Png -> CWnd::SetWindowRgn()


Sujet :

Windows

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de kidpaddle2
    Inscrit en
    Avril 2006
    Messages
    430
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 430
    Par défaut [MFC] Png -> CWnd::SetWindowRgn()
    Bonjour,

    Je viens de migrer de l'API Windows C à sa surcouche MFC il y a peu, et j'en profite pour utiliser des concepts non-utilisés auparavant. Ainsi, j'ai entendu dire que l'on pouvait obtenir une région -à appliquer à une fenêtre- à partir d'une image PNG avec des infos de transparence, avec GDI+. Je suppose que l'on passe par CImage, mais étant donné que je dois récupérer un HRGN...

    Merci d'avance.

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

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 407
    Par défaut
    Il me semble que seules les fenêtres "mères" peuvent être Layered...
    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 kidpaddle2
    Inscrit en
    Avril 2006
    Messages
    430
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 430
    Par défaut
    Peut-être... de toute façon, comme je le suspecte je ne pense pas que les pixels transparents -même totalement- soient "traversables" (mais si vous pensez le contraire, dites-le moi...).

    Auriez-vous une réponse au reste ?

    Merci.

  4. #4
    Membre éclairé Avatar de kidpaddle2
    Inscrit en
    Avril 2006
    Messages
    430
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 430
    Par défaut
    Je confirme, SetWindowLayeredAttributes() marche parfaitement sur CDialog (et sûrement sur CWnd). Code pour rendre une View transparente :

    Code C++ : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    BOOL CTestMFCDlg::OnInitDialog()
    {
        //...
     
        //Bizarre : CWnd::GetStyle existe, mais pas sa réciproque ? Edit: CWnd::ModifyStyle()...
        SetWindowLong(GetSafeHwnd(), GWL_EXSTYLE, GetWindowLong(GetSafeHwnd(), GWL_EXSTYLE) | WS_EX_LAYERED);
        SetLayeredWindowAttributes(RGB(236,233,216), 0, LWA_COLORKEY);
     
        //...
        return TRUE;
    }

    Par contre, cela concerne les bitmaps : le support du .png m'apporterait beaucoup, donc auriez-vous une réponse à ma question, je vous prie ?

    Merci.

    P.S: Mon permier post a été édité.

  5. #5
    Membre éclairé Avatar de kidpaddle2
    Inscrit en
    Avril 2006
    Messages
    430
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 430
    Par défaut
    J'ai trouvé cela sur CodeProject(), mais connaissant mal exactement les formats d'image (d'après ce que je vois, un PNG est simplement un tableau contenant pour chaque pixel une valeur RGB (couleurs) ainsi qu'Alpha, comme le Bitmap ne contenant pas cette dernière ?), je ne vois pas comment utiliser le code :

    Selon moi, je devrais charger une image png avec cette classe, récupérer les valeurs RGBA avec PngImage::getRGBA(), dont les valeurs RGB me permettent de créer un bitmap, mais à ce moment-là comment connaître les infos de transparence (pour la création d'une région, et l'affichage de l'image) ?

    Merci d'avance.

    P.S: Au fait, dans un projet MFC/SDI, sur quoi s'applique SetWindowRgn() (ou plutôt SetLayeredWindowAttributes()) ? Sur la CMainFrame ou la CView ?
    Cette méthode me servant à tailler la fenêtre selon un skin, même question quant à l'affichage de celui-ci... merci.

Discussions similaires

  1. [MFC] Afficher une CWnd sur un 2ème moniteur
    Par Philippe320 dans le forum MFC
    Réponses: 11
    Dernier message: 30/09/2006, 23h58
  2. [MFC] question sur CWnd::GetWindowRect
    Par r0d dans le forum MFC
    Réponses: 2
    Dernier message: 12/05/2006, 11h07
  3. Réponses: 3
    Dernier message: 19/08/2005, 16h18
  4. [MFC] Modifier curseur e souris dans CWnd
    Par DarkWiken dans le forum MFC
    Réponses: 4
    Dernier message: 17/03/2005, 12h04
  5. Réponses: 21
    Dernier message: 09/02/2005, 09h35

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