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 :

GridLayout et API Win32


Sujet :

Windows

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    165
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 165
    Points : 56
    Points
    56
    Par défaut GridLayout et API Win32
    Bonjour a tous,

    je cherche a implémenter une classe (équivalente aux QGridLayout de QT) en win 32, cependant je galère un peu.

    J'utilise CreateRectRgn pour créer des régions rectangulaire et SetWindowRgn pour mettre un widget a l'intérieur d'une région.

    Si toute les region sont de la même taille, ce n'est pas trop dur cependant il faut tenir compte de pleins de paramètres :
    - Certain "Widget" ont une taille minimale et / ou maximal (d'autre une taille fixe)
    - Certain "Widget" ont un colspan et / ou rowspan different de 1.

    J'avais implementer la version ou tous les block étaient de la même taille, mais la c'est plus dur. J'ai du mal a écrire l'algo en "francais".

    Dans la classe,
    + je stock un vecteur de structure contenant pour chaque widget : (VEC)
    ----> un HWND du widget
    ----> la position vertical
    ----> la position horizontal
    ----> le colspan
    ----> le rowspan
    ----->region associee (HRGN) initialement a NULL
    + le nombre max de colonne (MX)
    + le nombre max de ligne (MY)
    + La marge entre chaque widget verticalement
    + La marge entre chaque widget horizontalement
    + la taille du widget parent


    ----------------
    Ajout d'un widget : (on passe en parametre un HWND, positionX, positionY, colspan, rowspan
    // on calcul si le nombre max de col et de ligne n'a pas change
    Si PositionX > MX
    MX = PositionX
    Si PositionY > MY
    MY = PositionY
    On declare une map de unsigned int pour les col et les lignes
    // On a ainsi le nombre max de widget verticalement et horizontalement
    On push dans VEC un nouvelle struct avec les parametre de cette fonction)
    On parcours VEC
    Si le composant a une taille minimal horizontalement
    alors Map[index de la colonne] = cette taille minimale (on decremente egalement cette taille de la taille du widget parent)
    Ou Si ... (De meme verticalement)
    Sinon on incrémente le nombre de widget restant (ceux qui non pas de taille minimal et on divise la taille du widget parent restant par le nombre on a ainsi la taille de toute les colonne)
    On parcourt le VEC pour créer les région et y mettre les widget
    ----------------

    Ce code est plus ou moins fonctionnelle cependant ca ne tient pas en compte des colspan et rowspan ...

    Si vous pouviez m'éclairer pour implémenter ceci ou si vous avez un meilleur algo en tête que celui que j'ai utilise,
    N'hésitez pas.

    Cordialement,
    Toams

  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
    J'ai du mal à voir pourquoi tu trifouilles la région des fenêtres et contrôles. Généralement, on ne fait ça que pour donner à une fenêtre une forme non-rectangulaire...
    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.

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    165
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 165
    Points : 56
    Points
    56
    Par défaut
    Cela dans le but de positionner les widgets facilement dans une fenetre et faciliter le redimensionnement.

    Un petit shcema plutot qu'un long dialogue :




    Chaque bloque représentant un widget.

    Codrialement,
    Toams

  4. #4
    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
    Mais je ne vois pas ce que les régions viennent y faire.
    C'est clairement un terme GDI, alors que là on ne devrait pas descendre plus bas que le niveau USER (donc, MoveWindow() / SetWindowPos() OK, mais inutile de toucher aux régions).
    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.

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    165
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 165
    Points : 56
    Points
    56
    Par défaut
    Je vois, tu me suggères juste de déplacer les widget au sein de la classe sans passer par des régions, en effet ca évite d'utiliser les régions pour rien. Cependant ca ne règle pas le problème d'algo de positionnement si tu as une idée.

    Merci encore

Discussions similaires

  1. [Débutant]Quelques questions de principe sur l'API win32
    Par silver_dragoon dans le forum Windows
    Réponses: 4
    Dernier message: 19/03/2004, 18h38
  2. [API WIN32] Pb avec SHGetSpecialFolderLocation
    Par Invité dans le forum MFC
    Réponses: 3
    Dernier message: 27/01/2004, 21h19
  3. [API Win32] WriteFile()
    Par tut dans le forum MFC
    Réponses: 2
    Dernier message: 27/01/2004, 16h13
  4. API Win32
    Par benoit70 dans le forum MFC
    Réponses: 8
    Dernier message: 26/01/2004, 19h11
  5. [API win32] Récupérer le répertoire d'un profile
    Par sbeu dans le forum API, COM et SDKs
    Réponses: 3
    Dernier message: 27/09/2002, 12h38

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