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

Windows Discussion :

Hauteur par défaut d'une barre d'état


Sujet :

Windows

  1. #1
    Membre du Club Avatar de Array
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    210
    Détails du profil
    Informations personnelles :
    Âge : 32
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 210
    Points : 55
    Points
    55
    Par défaut Hauteur par défaut d'une barre d'état
    Bonjour,

    Je cherche comment déterminer la hauteur par défaut d'une fenêtre de barre d'état (i.e. une fenêtre crée avec CreateWindowEx ayant reçu comme 2ème argument STATUSBARCLASSNAME).

    J'aimerrais pouvoir obtenir la hauteur de ladite barre avant même de la créer. Comment serais-ce possible?

    J'ai essayé avec qqch du genre:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    NONCLIENTMETRICS ncm;
    
    SystemParametersInfoA(SPI_GETNONCLIENTMETRICS, (ncm.cbSize = sizeof(NONCLIENTMETRICS)), &ncm, 0x0);
    
    UINT sfheight = _DivMul(abs(ncm.lfStatusFont.lfHeight), GetDeviceCaps(GetDC(0x0), LOGPIXELSY), 72);
    printf("%u\n", sfheight);
    où _DivMul correspond à cette déclaration:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    int _DivMul(const int n, const int d, const int m) {
    
    	const float _n = n;
    	const float _d = d;
    	const float _m = m;
    
    	double r = _n * _m;
    	r /= _d;
    
    	return (r);
    }
    Je croyais que ceci me permettrait d'obtenir la hauteur de la police, et que je pourrais par la suite ajouter simplement la hauteur des bordures (que l'on peut obtenir avec GetSystemMetrics()). Mais... le printf du code ci-dessus affiche 8, ce qui est en fait, je crois, la taille de la police en points

    Je me suis inspiré du code que l'on peut retrouver sur cette page. Mais ce n'est de toute façon pas ce que je cherchais. J'ai aussi vu des méthodes très faciles avec GetWindowRect(hWndStatus), mais, il faut avoir le hwnd de la barre d'état, ce que je ne peux faire sans créer la barre d'état avant...


    Donc, je ne sais plus trop quoi faire... Il devrait pourtant y avoir un moyen... En effet, quand le "WndProc" d'une barre d'état reçoit WM_SIZE, le calcul s'effectue sûrement suivant les paramètres par défaut du système... Comment pourrais-je reproduire ce calcul?

    Sur mon système, la fenêtre de la barre d'état a par défaut une hauteur de 20 pixels... Mais, si jamais je changeais certains paramètres de Windows, ce serait plus. Je ne peux donc pas simplement assumer que toutes les barres d'état ont par défaut une hauteur de 20 px.


    Merci,

    Cordialement,

    Array

    EDIT: No C++/MFC please!

  2. #2
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    Je vois bien un truc du genre GetClassInfo() pour obtenir la WindowProc des barres d'état, puis CallWindowProc() dessus (ne l'appelle pas directement, car ça n'est pas forcément une fonction) avec un message du genre WM_GETMINMAXINFO...
    Bien sûr, ça peut aussi bien planter...
    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.

Discussions similaires

  1. [C#] Paramètre par défaut dans une fonction
    Par RobinJulie dans le forum Windows Forms
    Réponses: 5
    Dernier message: 18/01/2012, 14h07
  2. Sélection valeur par défaut dans une zone de liste
    Par Cécile154 dans le forum IHM
    Réponses: 2
    Dernier message: 15/02/2005, 18h20
  3. Réponses: 2
    Dernier message: 06/07/2004, 17h46
  4. Valeur par défaut dans une table objet
    Par Ricky81 dans le forum Oracle
    Réponses: 12
    Dernier message: 18/03/2004, 11h52
  5. Réponses: 2
    Dernier message: 18/10/2003, 14h42

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