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

Visual C++ Discussion :

[API][WIN32] Deux Toolbar à la fois


Sujet :

Visual C++

  1. #1
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 3
    Points : 1
    Points
    1
    Par défaut [API][WIN32] Deux Toolbar à la fois
    Bonsoir à tous,
    j'écris une application en C++ avec l'aide des API WIN32 et je rencontre un problème avec une toolbar.
    Une première toolbar s'affiche correctement mais la deuxième s'affiche par dessus la première alors que je m'attends à ce qu'elle s'affiche en dessous de la première.
    Mon bout de code est le suivant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    // création barre d'outils
    HWND hWndToolBar_1 = CreateWindowEx(0, TOOLBARCLASSNAME, NULL, WS_CHILD | TBSTYLE_TOOLTIPS,0, 0, 0, 0, hWnd, 0,hInst, NULL);
     
    // ajout style TBSTYLE_FLAT
    DWORD dwStyle = GetWindowLong(hWndToolBar_1, GWL_STYLE);
    SetWindowLong(hWndToolBar_1, GWL_STYLE, dwStyle | TBSTYLE_FLAT);
     
    ... association des boutons........etc.... puis affichage:
    SendMessage(hWndToolBar_1, TB_AUTOSIZE, 0, 0);
    ShowWindow(hWndToolBar_1, SW_SHOW);
    ...
    Je fais alors la même chose avec HWND hWndToolBar_2... ...
    pour la deuxième toolbar

    Y-a-t-il un style à rajouter pour permettre l'affichage de la deuxième toolbar, Comment définir les positions ?
    Avec les MFC il existe la possibilité de faire cela en utilisant un style, comment faire avec les API.

    Ca doit forcement être simple ce truc là !! impossible de trouver des renseignements sur internet.

    Merci d'avance pour votre aide ou votre point de vue !
    Nicolah

    Merci de penser aux balises de code / nico-pyright(c)

  2. #2
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    48
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 48
    Points : 40
    Points
    40
    Par défaut
    Bonjour,

    Lorsque tu fais appel à la fonction, il y a deux paramètres qui te permettent de modifier la position de ta barre d'outils. Ce sont les paramètres x et y.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    HWND CreateWindow(      
     
        LPCTSTR lpClassName,
        LPCTSTR lpWindowName,
        DWORD dwStyle,
        int x,
        int y,
        int nWidth,
        int nHeight,
        HWND hWndParent,
        HMENU hMenu,
        HINSTANCE hInstance,
        LPVOID lpParam
    );
    As-tu essayé de modifier ces paramètres lorsque tu appelles cette fonction ?

  3. #3
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 3
    Points : 1
    Points
    1
    Par défaut Repositionnement
    Bonsoir,
    tout d'abord merci pour ta réponse cedekasme;
    j'ai essayé dans tous les sens mais cela ne fonctionne pas: Aucun effet visible.
    Par contre, je peux afficher deux barre d'outil en spécifiant qu'une s'affiche en haut et l'autre en bas. Pour celle d'en bas, il faudrait gérer le resizing du framewindow car sinon elle se ballade au milieu de la fenêtre lors d'un redimensionnement: Là de nouveau j'ai un problème de position...

    Je pense que cela pourrait marcher avec des toolbar dockable.
    Je vais chercher dans cette voie mais si vous avez d'autres idées ou résultats de tests, c'est bienvenu,
    d'avance merci !!

  4. #4
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 3
    Points : 1
    Points
    1
    Par défaut Résultat d'un test
    Bonjour à tous,
    voici un test que j'ai fait pour résoudre le problème des deux barres d'outils en API WIN32:
    J'ai créé une application toute simple MFC qui comprend deux barres d'outils séparées et dockable (deux fois la même barre d'outils que le wizard à mis en place). La fonction GetWindowLong je récupère les style GWL_STYLE et GWL_EXSTYLE: 0 pour EXSTYLE et 1409288270 pour STYLE.
    J'utilise donc ces deux valeurs pour ma propre création de toolbar via API avec la fonction SetWindowLong(m_hWndToolBar, GWL_STYLE, 1409288270) et je vérifie bien sûr par dwStyle = GetWindowLong(m_hWndToolBar, GWL_STYLE); que la valeur dwStyle retournée est bien celle que je voulais fixer !

    voici le code MFC:

    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
    40
    41
    42
    43
    44
    45
    46
    47
    48
    //Création 1ere toolbar
    if (!m_wndToolBar_1.CreateEx(this, TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE | CBRS_TOP | CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC) ||
    !m_wndToolBar_1.LoadToolBar(IDR_MAINFRAME))
    	{
    		TRACE0("Failed to create toolbar 1\n");
    		return -1;      // fail to create
    	}
     
    //Création ème toolbar
    if (!m_wndToolBar_2.CreateEx(this, TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE | CBRS_TOP | CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC) ||
    !m_wndToolBar_2.LoadToolBar(IDR_MAINFRAME))
    	{
    		TRACE0("Failed to create toolbar 2\n");
    		return -1;      // fail to create
    	}
     
    // dockable 1
    m_wndToolBar_1.EnableDocking(CBRS_ALIGN_ANY);
    EnableDocking(CBRS_ALIGN_ANY);
    DockControlBar(&m_wndToolBar_1);
    // dockable 2
    m_wndToolBar_2.EnableDocking(CBRS_ALIGN_ANY);
    EnableDocking(CBRS_ALIGN_ANY);
    DockControlBar(&m_wndToolBar_2);
     
    // récuparation des 2 style GWL_STYLE et GWL_EXSTYLE
    HWND TBwnd = m_wndToolBar_2.m_hWnd;
    LONG TBlong_ex = GetWindowLong(TBwnd,GWL_EXSTYLE);
    LONG TBlong = GetWindowLong(TBwnd,GWL_STYLE);
    ....
    ....
     
    Et voici le code API:
    HWND InitToolBar(HWND hWnd, HINSTANCE hInst, int Index)
    {
    // création barre d'outils
    HWND m_hWndToolBar;
    if (Index==1) { m_hWndToolBar = CreateWindowEx(0, TOOLBARCLASSNAME, NULL, WS_CHILD ,0 , 0, 0, 0, hWnd, 0,hInst, NULL); }
     if (Index==2) { m_hWndToolBar = CreateWindowEx(0, TOOLBARCLASSNAME, NULL, WS_CHILD ,0 ,0 ,0 , 0, hWnd, 0,hInst, NULL); }
     
    if(!m_hWndToolBar) return FALSE;
     
    // ajout style TBSTYLE_FLAT (Pb quand fait lors de la création)
    DWORD dwStyle = GetWindowLong(m_hWndToolBar, GWL_STYLE);
    SetWindowLong(m_hWndToolBar, GWL_STYLE, 1409288270);
    SetWindowLong(m_hWndToolBar, GWL_EXSTYLE, 0);
    ....
    ....
    et au miracle, cela ne marche pas !
    En API, même avec les mêmes style qu'en MFC, les deux barres d'outils sont superposées...

    Pour ma part, j'arrête là les investigations, j'ai déjà perdu assez de temps à essayer de trouver comment faire un truc qui devrait à mon sens être ultra simple...
    Microsoft a des progrés à faire pour rendre lisible ses API.
    Nicolah

  5. #5
    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
    Points : 17 323
    Points
    17 323
    Par défaut
    salut, le positionnement de deux barres d'outils en MFC:
    post it faq:
    http://www.developpez.net/forums/sho...68#post1146468


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, 19h38
  2. [API WIN32] Pb avec SHGetSpecialFolderLocation
    Par Invité dans le forum MFC
    Réponses: 3
    Dernier message: 27/01/2004, 22h19
  3. [API Win32] WriteFile()
    Par tut dans le forum MFC
    Réponses: 2
    Dernier message: 27/01/2004, 17h13
  4. API Win32
    Par benoit70 dans le forum MFC
    Réponses: 8
    Dernier message: 26/01/2004, 20h11
  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, 13h38

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