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 :

Position d'une fen�tre sur l'�cran (left, top)


Sujet :

MFC

  1. #1
    Membre confirm�
    Inscrit en
    Octobre 2005
    Messages
    79
    D�tails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 79
    Par d�faut Position d'une fen�tre sur l'�cran (left, top)
    Bonjour,

    Je souhaiterais r�cup�rer les coordonn�es (du point haut gauche par exemple) de la fen�tre de mon projet VC++.

    Je peux m'en sortir en faisant en sorte que la fen�tre soit centr�e avec la m�thode GetSystemMetrics(SM_C*SCREEN) et les dimensions de ma fen�tre mais ce n'est h�las plus le cas lors d'un d�placement de celle-ci.

    Merci � ceux qui voudront bien m'aider.

  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
    voir GetWindowRect qui renvoie les coordonn�es en rapport a l'ecran.


  3. #3
    Membre confirm�
    Inscrit en
    Octobre 2005
    Messages
    79
    D�tails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 79
    Par d�faut
    Merci cela marche.

    Pour que cela soit utile, j'aimerais retrouver la hauteur occup�e par le titre de la fen�tre.

    C'est ce que j'ai tent� de faire avec le bout de code suivant mais je n'arrive pas � comprendre pourquoi j'ai une erreur de compilation (le type TITLEBARINFO n'est pas accept� alors que j'ai bien d�fini le header windows.h) :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
       TITLEBARINFO pti;
    	GetTitleBarInfo(hWin, &pti);
     
    	int hauteur_barre_titre = pti.rcTitleBar.bottom - pti.rcTitleBar.top;

  4. #4
    Membre �m�rite
    Avatar de Gabrielly
    Inscrit en
    Juin 2004
    Messages
    722
    D�tails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 722
    Par d�faut
    Essaie de faire un click droit sur ce type et va � "Go to definition" pour voir dans quel fichier il est d�finit.

  5. #5
    Membre confirm�
    Inscrit en
    Octobre 2005
    Messages
    79
    D�tails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 79
    Par d�faut
    Normalement, le type TITLEBARINFO est d�fini dans winuser.h, que j'ai inclus, mais le 'Go to definition' ne donne rien justement.

    http://msdn.microsoft.com/library/de...tlebarinfo.asp

    Comment m'en sortir ?

  6. #6
    Expert �minent
    Avatar de M�dinoc
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 397
    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 397
    Par d�faut
    AdjustWindowRect() pour retrouver quelle taille doit avoir la fen�tre pour une taille de zone client donn�e

    GetClientRect() + MapWindowPoints() pour retrouver la position de la zone client d'une fen�tre sur l'�cran
    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.

  7. #7
    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,
    si j'ai bien compris ce que tu demandes il faut travailler avec GetSystemMetrics
    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
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
     
    // -------------------------------------------------------------------
    void GetCaptionRect(CWnd *pWnd,CRect& rect)
    {		
    	DWORD dwStyle=pWnd->GetStyle();
     
    	CSize szFrame=(dwStyle & WS_THICKFRAME) ?	
    		CSize(GetSystemMetrics(SM_CXSIZEFRAME), GetSystemMetrics(SM_CYSIZEFRAME)) :
    		CSize(GetSystemMetrics(SM_CXFIXEDFRAME), GetSystemMetrics(SM_CYFIXEDFRAME));
     
    	// coordonnée fenetre	
    	pWnd->GetWindowRect(rect);		
    	// mise a l'origine 0,0
    	rect-=CPoint(rect.left,rect.top);	
    	// frame
    	rect.left+=szFrame.cx;				
    	// frame
    	rect.right-=szFrame.cx;				
    	// top 
    	rect.top+=szFrame.cy;				
    	// height:tient compte si TOOLWINDOW 
    	rect.bottom=rect.top+
    		(((pWnd->GetExStyle() & WS_EX_TOOLWINDOW)==WS_EX_TOOLWINDOW) ? 
    		GetSystemMetrics(SM_CYSMCAPTION) : GetSystemMetrics(SM_CYCAPTION))-
    		GetSystemMetrics(SM_CYBORDER);
     
    	if(pWnd->IsIconic())
    	{
    		rect.InflateRect(1,1,1,-1);
    	}
    }
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
     
    int n=GetSystemMetrics(SM_CYCAPTION);
    	CRect r;
    	GetCaptionRect(this,r);	
    	CString str;
    	str.Format("SystemMetrics:%d GetCaptionRect:%d",n,r.Height());
    	AfxMessageBox(str);

  8. #8
    Membre confirm�
    Inscrit en
    Octobre 2005
    Messages
    79
    D�tails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 79
    Par d�faut
    Merci pour vos r�ponses je vais essayer �a.

    farscape j'aimerais bien utiliser ton morceau de code mais je ne peux me servir des MFC par contre... J'ai tent� de remplacer par cela :
    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
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
     
    void GetCaptionRect(HWND *pWnd, RECT & rect)
    {      
       DWORD dwStyle = pWnd->GetStyle();
     
       SIZE szFrame;
       if (dwStyle & WS_THICKFRAME)
       {
          szFrame.cx = GetSystemMetrics(SM_CXSIZEFRAME);
    	  szFrame.cy = GetSystemMetrics(SM_CYSIZEFRAME);
       }
       else
       {
          szFrame.cx = GetSystemMetrics(SM_CXFIXEDFRAME);
    	  szFrame.cy = GetSystemMetrics(SM_CYFIXEDFRAME);
       }
     
       // coordonnée fenetre   
       pWnd->GetWindowRect(rect);      
       // mise a l'origine 0,0
       rect.left = 0;
       rect.top = 0;
       // frame
       rect.left+=szFrame.cx;            
       // frame
       rect.right-=szFrame.cx;            
       // top
       rect.top+=szFrame.cy;            
       // height:tient compte si TOOLWINDOW
       rect.bottom=rect.top+
          (((pWnd->GetExStyle() & WS_EX_TOOLWINDOW)==WS_EX_TOOLWINDOW) ?
          GetSystemMetrics(SM_CYSMCAPTION) : GetSystemMetrics(SM_CYCAPTION))-
          GetSystemMetrics(SM_CYBORDER);
     
       if(pWnd->IsIconic())
       {
          rect.InflateRect(1,1,1,-1);
       }
    }
    Il reste des erreurs : les fonctions GetStyle(), GetWindowRect(), GetExStyle(), IsIconic(), InflateRect() ...

  9. #9
    Expert �minent
    Avatar de M�dinoc
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 397
    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 397
    Par d�faut
    Mais que cherches-tu � faire exactement?
    Retrouver les coordonn�es de la client area par rapport � l'�cran?
    Si oui, cf mon post.
    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.

  10. #10
    Membre �m�rite
    Avatar de Gabrielly
    Inscrit en
    Juin 2004
    Messages
    722
    D�tails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 722
    Par d�faut
    Tu as aussi les api SetWindowPlacement() and GetWindowPlacement()

Discussions similaires

  1. Agrandir une fen�tre sur deux �crans
    Par SheikYerbouti dans le forum Agents de placement/Fen�tres
    R�ponses: 2
    Dernier message: 18/04/2013, 09h24
  2. Lancer une fen�tre sur un �cran/bureau particulier
    Par lovecpp dans le forum Applications et environnements graphiques
    R�ponses: 2
    Dernier message: 01/10/2012, 16h17
  3. R�ponses: 0
    Dernier message: 04/04/2009, 14h07
  4. [c++] Obtenir la position d'une fen�tre sur l'�cran
    Par Silverstone dans le forum Windows
    R�ponses: 2
    Dernier message: 05/09/2006, 16h11
  5. Comment centrer une fen�tre sur l'�cran?
    Par bygui dans le forum Interfaces Graphiques en Java
    R�ponses: 1
    Dernier message: 07/04/2006, 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