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 :

OnPaint et bidouilles : Question pour FarScape


Sujet :

MFC

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    114
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 114
    Par défaut OnPaint et bidouilles : Question pour FarScape
    Désolé de te cibler comme ca FarScape mais comme tu connais dejà mon problème...
    Récemment j'ai posté une news avec le sujet suivant :
    OnPaint OnDraw CView

    Ou mon problème etait de créer un CStatic dans une application SDI puis de pouvoir l'imprimer.
    Le souci etait que mon CStatic se dessine tout seul alors que mon
    application SDI attend que l'on dessine dans sa fonction OnDraw.
    Apres discussions sur un newsgroup Microsoft, on m'a suggére l'idée un peu tordu de la chose suivante :

    dans ma classe Cstatic je déclare une methode publique OnDraw qui est appelé par le OnPaint tel que montré ci dessous :

    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
     
    void CxStatic::OnPaint()
    {
    	OnDraw(NULL);
    }
     
    void CxStatic::OnDraw(CDC* pDC)
    {
    	CPaintDC	dc(this); // device context for painting
    	CDC*		pMyDC = NULL;
     
    	if (pDC == NULL)
    		pMyDC = &dc;
    	else
    		pMyDC = pDC;
     
    ...
    }
    Ensuite dans ma classe derivé de CView je fais la chose suivante :

    void CTestView::OnDraw(CDC* pDC)
    {
    m_pCxStatic->OnDraw(pDC);
    }


    Et c'est incroyable mais ca marche, lorsque je fais aperçu avant impression je vois bien mes CxStatic mais ils sont mal positionnés car ils se retrouvent tous en haut a gauche de ma vue (0,0).
    Saurais tu me dire pourquoi et comment remédier au problème

    Merci

  2. #2
    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
    Par défaut
    salut,
    quand un contrôle dessine dans sa zone client il dessine en 0,0
    (celui ci étant positionné dans la surface cliente de la view).
    quand tu fournis au contrôle le dc de la view il dessine donc en 0,0 perdant du coup la notion de placement du contrôle dans la surface de la view ...

    pour remédier au problème tu peux utiliser CDC::SetWindowOrg qui va déplacer l'origine du DC . le point de départ devra correspondre au point haut gauche du contrôle à dessiner .
    la coordonnées étant retrouvée en faisant un GetWindowRect sur le contrôle.
    puis une conversion de coordonnées sur la view.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
     m_pCxStatic->GetWindowRect(&Rect); // coordonnées screen 
    this->ScreenToClient(&Rect); // screen -> to client ( view ou dialog)
    Dans la série magouilles:
    on peut aussi créer un dc en mémoire puis un bitmap et laisser le contrôle se dessiner dedans
    Ensuite projeter le bitmap sur la view a la bonne position .
    Ou encore utiliser la technique de la recopie écran que je t’ai proposée dans l’autre poste :
    Tu laisses dessiner ta view et après tu génères un bitmap de l’ensemble, bitmap que tu peux ensuite imprimer.

    Bien sûr toutes ces magouilles supportent plus au moins bien le passage sur l'imprimante car la résolution n'est pas la même il va falloir zoomer …
    tu devras donc certainement passer par un bitmap puis l'étirer pour l'imprimer.
    Et si jamais un jour tu gères le scroll dans ton application avec un CScrollview ,patatra
    Toute cette belle magouille tombe à l’eau .

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

Discussions similaires

  1. BTS Info de Gestion passé aujourd'hui question pour SQL
    Par red210 dans le forum Décisions SGBD
    Réponses: 11
    Dernier message: 29/05/2005, 14h48
  2. [bochs] Question pour un kernel de base...
    Par hudson dans le forum Assembleur
    Réponses: 2
    Dernier message: 24/02/2005, 12h07
  3. Petite question pour Backup
    Par chicken92000 dans le forum Administration
    Réponses: 2
    Dernier message: 16/09/2004, 16h10
  4. [MIB] Questions pour construire une mib
    Par fadoua dans le forum Développement
    Réponses: 4
    Dernier message: 11/03/2004, 10h47

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