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

MFC Discussion :

HWND : envoyer une image dans la vue à la bonne dimension


Sujet :

MFC

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    759
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 759
    Points : 159
    Points
    159
    Par défaut HWND : envoyer une image dans la vue à la bonne dimension
    Salut,

    Voilà, j'ai une fonction de Preview (pas à moi) qui envoie des images à l'endroit spécifié par HWND.

    Soit c'est une fenêtre qu'on crée soi-même avec CreateWindow, soit on peut la mettre dans la vue avec le paramètre m_hWnd de CMyProjectView.

    Oui, mais voilà, je voudrais que le cadre en fait ne soit pas totalement celui de la vue, je voudrais bien l'afficher DANS la vue (donc pas de CreateWindow) mais PAS SUR TOUTE LA SURFACE. (je veux que la surface d'affichage dépende de la résolution demandée, donc des paramètres m_iWidth et m_iHeight des images.

    Comment puis-je faire.
    Merci

  2. #2
    Membre habitué
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    759
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 759
    Points : 159
    Points
    159
    Par défaut
    Donc n'y a-t-il pas un moyen d'avoir un HWND de la vue légèrement différent de m_hWnd (un m_hWnd restreint à une certaine longueur et largeur) :

  3. #3
    Rédacteur
    Avatar de farscape
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    9 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

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

    Informations forums :
    Inscription : Novembre 2003
    Messages : 9 055
    Points : 17 323
    Points
    17 323
    Par défaut
    Citation Envoyé par stof
    Donc n'y a-t-il pas un moyen d'avoir un HWND de la vue légèrement différent de m_hWnd (un m_hWnd restreint à une certaine longueur et largeur) :
    Salut, ça ne veut pas dire grand chose ce que tu dis lol …
    un HWND désigne un handle de fenêtre point.
    pour manipuler les dimensions de la fenêtre il faut utiliser les fonctions MoveWindow ou setWindowPos .
    si tu ne veux pas que cette fonction dessine dans toute la surface de ta fenêtre ça ne va pas être facile.
    Sauf à magouiller en créant une fenêtre fille dans ta fenêtre principale de la dimension requise et donner son HWND a ta fonction.


  4. #4
    Membre habitué
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    759
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 759
    Points : 159
    Points
    159
    Par défaut
    Citation Envoyé par farscape
    pour manipuler les dimensions de la fenêtre il faut utiliser les fonctions MoveWindow ou setWindowPos .
    si tu ne veux pas que cette fonction dessine dans toute la surface de ta fenêtre ça ne va pas être facile.
    Sauf à magouiller en créant une fenêtre fille dans ta fenêtre principale de la dimension requise et donner son HWND a ta fonction.
    Je me doutais de la réponse...

    1°/ Manipuler les dimensions de la fenêtre me paraît pas être une bonne solution parce que c'est pas le comportement qu'on attend que tout le cadre suive les dimensions de ce qu'on envoit dedans

    2°/ La magouille, c'est un CreateWindow qu'on place par-dessus la fenêtre principale? Si c'est ça, c'est pas la peine non plus.

    Je posais quand-même la question au cas où, mais donc je ne peux pas indiquer à cette fonction une destination plus précise que
    - la vue (m_hWnd)
    - le cadre (m_hWndOwner)

    Ben mince alors

  5. #5
    Membre habitué
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    759
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 759
    Points : 159
    Points
    159
    Par défaut
    Bon, en fait, ça marche avec MoveWindow; il faut juste que je remette la fenêtre à sa bonne dimension avec un nouveau MoveWindow quand j'ai fini d'utiliser la fonction :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    HWND myHwnd;
    	myHwnd=pView->m_hWnd;
    	MoveWindow(myHwnd, 0, 0, m_Width, m_Height, TRUE);
     
    	MaFonction(m_hWnd);
    Pour ta question ci-dessous : parce que c'est tout laid d'avoir une fenêtre comme ça par-dessus d'une application MDI.

    Mais merci pour ton MoveWindow, je vais '"magouiller" avec ça, lol

  6. #6
    Rédacteur
    Avatar de farscape
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    9 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

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

    Informations forums :
    Inscription : Novembre 2003
    Messages : 9 055
    Points : 17 323
    Points
    17 323
    Par défaut
    Citation Envoyé par stof
    Citation Envoyé par farscape
    pour manipuler les dimensions de la fenêtre il faut utiliser les fonctions MoveWindow ou setWindowPos .
    si tu ne veux pas que cette fonction dessine dans toute la surface de ta fenêtre ça ne va pas être facile.
    Sauf à magouiller en créant une fenêtre fille dans ta fenêtre principale de la dimension requise et donner son HWND a ta fonction.
    Je me doutais de la réponse...

    1°/ Manipuler les dimensions de la fenêtre me paraît pas être une bonne solution parce que c'est pas le comportement qu'on attend que tout le cadre suive les dimensions de ce qu'on envoit dedans

    2°/ La magouille, c'est un CreateWindow qu'on place par-dessus la fenêtre principale? Si c'est ça, c'est pas la peine non plus.

    Je posais quand-même la question au cas où, mais donc je ne peux pas indiquer à cette fonction une destination plus précise que
    - la vue (m_hWnd)
    - le cadre (m_hWndOwner)

    Ben mince alors
    pourquoi ?

  7. #7
    Membre habitué
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    759
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 759
    Points : 159
    Points
    159
    Par défaut
    On a posté en même temps donc réponse ci-dessus.
    Merci.

  8. #8
    Membre éclairé
    Avatar de matazz
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    471
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 471
    Points : 668
    Points
    668
    Par défaut
    je sais pas mais si tu crée un bouton, ou un composant quelconque au dimensions que tu veut, que tu passe le HWND de ce composant à ta librairie, ça devrai marcher Non?

  9. #9
    Membre habitué
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    759
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 759
    Points : 159
    Points
    159
    Par défaut
    Déjà bien vu de proposer autre chose (la méthode MoveWindow n'est finalement pas terrible pour plein de raisons : si on a une boite qui se déplace en dehors de la nouvelle zone, on voit des traînées puisque seule la partie du cadre défini est redessinée, etc, etc.).

    J'aime donc bien l'idée de créer provisoirement un élément dans la fenêtre pour lui passer le contenu.

    Mais je ne vois toujours pas comment éviter le CreateWindow:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    HWND hwndButton = 0;
    	hwndButton = CreateWindow (
    	"",
    	"",
    	WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON,
    	0, 0, m_Width, m_Height,
    	myHwnd,
    	(HMENU) 1,
    	NULL,
    	NULL
    	);
    Ca ne me convient pas car c'est encore une nouvelle fenêtre qui se superpose; comment faire?

  10. #10
    Membre habitué
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    759
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 759
    Points : 159
    Points
    159
    Par défaut
    VRAIMENT RESOLU

    C'est la fonction SetWindowPlacement qui me manquait en fait :

    HWND myHwnd = pFW->m_hWnd; //fenêtre de l'application
    WINDOWPLACEMENT wpst;

    //** On diminue la taille de la fenêtre pour l'ajuster à la taille des images
    pFW->GetWindowPlacement(&wpst);
    wpst.showCmd=SW_RESTORE;
    pFW->SetWindowPlacement(&wpst);

    //** Déplacement et dimensionnement de la fenêtre selon les spécifications
    MoveWindow(myHwnd, 0, 0, m_Width, m_Heightn, TRUE);

    //** Fonction de Preview
    Preview(myHwnd);

    //** Maintenant que le dessin se fait dans la zone spécifiée, on peut restaurer l'aspect MAXIMIZED de la fenêtre
    wpst.showCmd=SW_MAXIMIZE;
    pFW->SetWindowPlacement(&wpst);

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

Discussions similaires

  1. [V8] Envoyer une image dans odoo xml-rpc
    Par oitsuki dans le forum Odoo (ex-OpenERP)
    Réponses: 3
    Dernier message: 11/12/2014, 02h35
  2. Envoyer un email avec une image dans le corps du mail
    Par nitch01 dans le forum Langage
    Réponses: 1
    Dernier message: 04/01/2012, 08h36
  3. Envoyer un mail avec une image dans le corps du mail
    Par tkoprowski dans le forum Android
    Réponses: 1
    Dernier message: 24/08/2011, 17h03
  4. Réponses: 3
    Dernier message: 06/12/2008, 19h34
  5. Réponses: 9
    Dernier message: 02/06/2007, 15h42

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