Deplacer une fenêtre sans barre de titre

Numéro d'article: 459068 - Voir les produits auxquels s'applique cet article
Ancien nº de publication de cet article : F09068
Agrandir tout | Réduire tout

Résumé

QUESTION:

Comment déplacer une fenêtre n'ayant pas de barre de titre donc de menu
système ?

REPONSE:

La solution consiste à surcharger la fonction OnNcHitTest(CPoint point)
de la classe associée à la fenêtre à déplacer.

Cette fonction est appelée à chaque déplacement de la souris sur la
fenêtre et la valeur qu'elle retourne indique le type de la zone pointée.

Les différentes valeurs de retour sont:

HTBORDER dans un bord d'une fenêtre n'ayant pas de border resizable.
HTBOTTOM dans le bord horizontal inférieur de la fenêtre.
HTBOTTOMLEFT dans le coin inférieur gauche de la fenêtre.
HTBOTTOMRIGHT dans le coin inférieur droit de la fenêtre.
HTCAPTION dans la zone de la barre de titre.
HTCLIENT dans la zone client.
HTERROR sur le fond de l'écran ou sur une ligne séparant des
fenêtres.
HTGROWBOX dans une boîte de modification de taille.
HTHSCROLL dans la barre de scroll horizontale.
HTLEFT dans le bord gauche de la fenêtre.
HTMAXBUTTON dans un bouton de maximisation.
HTMENU dans une zone de menu.
HTMINBUTTON dans un bouton de minimisation.
HTREDUCE dans un bouton de minimisation..
HTRIGHT dans le bord droit de la fenêtre.
HTSIZE dans une boîte de modification de taille (idem que
HTGROWBOX).
HTSYSMENU dans un menu de contrôle ou dans un bouton de fermeture
d'une fenêtre fille.
HTTOP dans le bord supérieur horizontal de la fenêtre.
HTTOPLEFT dans le coin supérieur gauche du bord de la fenêtre.
HTTOPRIGHT dans le coin supérieur droit du bord de la fenêtre.
HTTRANSPARENT dans une fenêtre recouverte par une autre.
HTVSCROLL dans la barre de scroll verticale.
HTZOOM dans un bouton de maximisation.

Dans l'exemple ci-dessous, il suffit de retourner dans la fonction
UINT CAboutDlg::OnNcHitTest(CPoint point) la valeur HTCAPTION si le
curseur de la souris se trouve sur une zone specifiée de la boîte de
dialogue CAboutDlg.

EXEMPLE:

Soit une classe CAboutDlg dérivée de la classe de base CDialog générée
avec Class Wizard:

class CAboutDlg : public CDialog
{
public:
CAboutDlg();

// Dialog Data
//{{AFX_DATA(CAboutDlg)
enum { IDD = IDD_ABOUTBOX };
//}}AFX_DATA

// Implementation
protected:
// DDX/DDV support
virtual void DoDataExchange(CDataExchange* pDX);
//{{AFX_MSG(CAboutDlg)
afx_msg UINT OnNcHitTest(CPoint point);
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
};

CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD)
{
//{{AFX_DATA_INIT(CAboutDlg)
//}}AFX_DATA_INIT
}

void CAboutDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CAboutDlg)
//}}AFX_DATA_MAP
}


BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)
//{{AFX_MSG_MAP(CAboutDlg)
// on rajoute le message intercepté par la fonction
ON_WM_NCHITTEST()
//}}AFX_MSG_MAP
END_MESSAGE_MAP()


// On implémente la fonction OnNcHitTest et on force la valeur de retour
// d'une zone de titre. Dans ce cas, dès que l'on clique sur la
// boîte de dialogue, on peut la déplacer.

UINT CAboutDlg::OnNcHitTest(CPoint point)
{
return HTCAPTION;

Propriétés

Numéro d'article: 459068 - Dernière mise à jour: lundi 18 octobre 1993 - Version: 1.0
Les informations contenues dans cet article s'appliquent au(x) produit(s) suivant(s):
  • Microsoft Visual C++ 1.0 Édition Professionnelle
Mots-clés : 
KB459068
L'INFORMATION CONTENUE DANS CE DOCUMENT EST FOURNIE PAR MICROSOFT SANS GARANTIE D'AUCUNE SORTE, EXPLICITE OU IMPLICITE. L'UTILISATEUR ASSUME LE RISQUE DE L'UTILISATION DU CONTENU DE CE DOCUMENT. CE DOCUMENT NE PEUT ETRE REVENDU OU CEDE EN ECHANGE D'UN QUELCONQUE PROFIT.
Exclusion de responsabilité concernant les contenus obsolètes dans la Base de connaissances
Cet article concerne des produits pour lesquels Microsoft n'offre plus de support. Il est par conséquent fourni « en l'état » et ne sera plus mis à jour.

Envoyer des commentaires

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com