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