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 :

Deux pitites questions pour l'API Windows


Sujet :

Windows

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

    Informations forums :
    Inscription : Avril 2006
    Messages : 193
    Points : 65
    Points
    65
    Par défaut Deux pitites questions pour l'API Windows
    Bonjour !
    Je voudrais savoir comment, avec l'API Windows, je peux :
    - faire plusieurs "pages" sur une même fenêtre.Des onglets quoi !Si vous voyez pas ce que je veux dire, allez dans le panneau de configuration: il y a plein de fenetres comme ca.

    - je voudrais aussi savoir comment réaliser un barre de chargement dans ma fenetre ^^ et aussi comment je peux la gérer ( en pourcentage par exemple )

    Voila. Merci !

  2. #2
    Membre confirmé Avatar de Mayti4
    Inscrit en
    Février 2004
    Messages
    442
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 442
    Points : 488
    Points
    488

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

    Informations forums :
    Inscription : Avril 2006
    Messages : 193
    Points : 65
    Points
    65
    Par défaut
    Merci !

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    193
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 193
    Points : 65
    Points
    65
    Par défaut
    ah excusez moi mais je ne réussi pas à compiler le code pour le prog avec onglet ! Je compile avec Code::Block, mais j'ai aussi essayé avec Dev-C++
    Je rappel le lien :
    ca me met la même erreur :
    In function `LRESULT EditProc(HWND__*, UINT, WPARAM, LPARAM)':
    `wpOrigEditProc' undeclared (first use this function)
    (Each undeclared identifier is reported only once for each function it appears in.)

    J'y comprends rien en tous cas ca plante à la derniere ligne :
    return CallWindowProc(wpOrigEditProc, hwnd, uMsg, wParam, lParam);

    Je me demande si il ne me manque pas un .a à inclure dans le projet.
    Vous pouvez m'aider ?
    Merci.

  5. #5
    Expert éminent sénior
    Avatar de Skyounet
    Homme Profil pro
    Software Engineer
    Inscrit en
    Mars 2005
    Messages
    6 380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Software Engineer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 6 380
    Points : 13 380
    Points
    13 380
    Par défaut
    Rajoute ca à ton fichier

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    #ifdef STRICT
      WNDPROC wpOrigEditProc ;
    #else
      FARPROC wpOrigEditProc ;
    #endif

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    193
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 193
    Points : 65
    Points
    65
    Par défaut
    Super ca marche !
    Merci !

  7. #7
    Membre régulier Avatar de acryline
    Profil pro
    Inscrit en
    Août 2006
    Messages
    200
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 200
    Points : 101
    Points
    101
    Par défaut
    Bonjour,

    j'ai le même problème mais chez moi Code::Blocks ne reconnaît pas la fonction InitCommonControls. Si j'enlève cette ligne, la fenêtre s'affiche sans les onglets.

    J'ai également un problème avec la structure TCI_TEM dans la doc WinApi cette structure a été remplacée par TCITEM . Quand j'utilise cette forme ça ne bogue pas au moins.

    Merci pour votre aide.

  8. #8
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par acryline
    j'ai le même problème mais chez moi Code::Blocks ne reconnaît pas la fonction InitCommonControls. Si j'enlève cette ligne, la fenêtre s'affiche sans les onglets.
    -lcomctl32

    J'ai également un problème avec la structure TCI_TEM dans la doc WinApi cette structure a été remplacée par TCITEM . Quand j'utilise cette forme ça ne bogue pas au moins.
    TCI_TEM n'existe pas. C'est TCITEM.

    http://msdn.microsoft.com/library/de...res/tcitem.asp

  9. #9
    Membre régulier Avatar de acryline
    Profil pro
    Inscrit en
    Août 2006
    Messages
    200
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 200
    Points : 101
    Points
    101
    Par défaut
    Whaou !!!! Merci ! C'est génial la programmation quand ça marche

    Encore merci !

  10. #10
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 382
    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 382
    Points : 41 590
    Points
    41 590
    Par défaut
    PS: Si tu veux juste faire une fenêtre à onglets comme dans le panneau de configuration, tu peux aussi utiliser une Property Sheet.

  11. #11
    Membre régulier Avatar de acryline
    Profil pro
    Inscrit en
    Août 2006
    Messages
    200
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 200
    Points : 101
    Points
    101
    Par défaut
    Oui en fait j'avais trouvé cette solution en premier et j'utilisais un fichier ressource mais ça ne marchait pas non plus. ET maintenant avec la solution de Emmanuel Delahaye les deux méthodes fonctionnent.

    Pour compléter le sujet voici la méthode avec des ressources et la fonction PropertySheet:

    Le fichier ressource.rc
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    #include <windows.h>
    
    
    TAB1 DIALOG
        0, 0, 232, 0
    BEGIN
    END
    
    TAB2 DIALOG
        0, 0, 232, 0
    BEGIN
    END
    Et le fichier main.c
    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
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    #include <windows.h>
    #include <commctrl.h>
    
    
    LRESULT CALLBACK  Procedure(HWND , UINT , WPARAM, LPARAM );
    BOOL APIENTRY Dialog1Proc(HWND, UINT, WPARAM, LPARAM);
    BOOL APIENTRY Tab1Proc(HWND ,UINT ,WPARAM ,LPARAM );
    BOOL APIENTRY Tab2Proc(HWND ,UINT ,WPARAM ,LPARAM );
    
     HINSTANCE hinstance;
    
    int WINAPI WinMain(HINSTANCE hinstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow)
    {
    
        static MSG msg;
        static WNDCLASSEX wc;
    	static HWND hwnd;
    		   // Structure de la classe de la fenêtre principale
    	wc.cbSize =sizeof(WNDCLASSEX);
    	wc.style =0;
        wc.lpfnWndProc = Procedure;
        wc.cbClsExtra = 0;
        wc.cbWndExtra = 0;
        wc.hInstance = hinstance;
        wc.hIcon = NULL;
        wc.hCursor = LoadCursor(NULL,IDC_ARROW);
        wc.hbrBackground = CreateSolidBrush(RGB(255,255,255));
        wc.lpszMenuName =  NULL;
        wc.lpszClassName = "Class";
        wc.hIconSm=NULL;
    
       //Enregistrer la classe de fenêtre
        if(!RegisterClassEx(&wc)) return FALSE;
    
    
            //créer la fenêtre
        hwnd = CreateWindowEx(WS_EX_COMPOSITED,"Class", ""
                ,WS_BORDER |WS_CAPTION|WS_MINIMIZEBOX |WS_SYSMENU |WS_CLIPCHILDREN ,
                                  300,100,300,400, NULL,NULL, hinstance, NULL);
        if (!hwnd)  return FALSE;
        ShowWindow (hwnd, nCmdShow);
    	UpdateWindow( hwnd );
    
    	//Boucle de message
        while (GetMessage(&msg, NULL, 0, 0))
        {
            TranslateMessage(&msg);
            DispatchMessage(&msg);
        }
        return (int) msg.wParam;
    
    
    }
    /******************************************************************************/
    //Procédure principale
    LRESULT CALLBACK  Procedure(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
    {
        HWND hwndBouton=NULL;
        switch (uMsg)
        {
            case WM_CREATE:
               hwndBouton =	CreateWindow("BUTTON","testeur",
                    WS_VISIBLE | WS_CHILD | BS_PUSHBUTTON ,
                    50,30,50,25,hwnd,NULL,NULL,NULL);
            return 0;
    
            case WM_COMMAND:
            //quand on clique sur le bouton ok de la fenêtre princiaple -->
               if (HIWORD (wParam)==(DWORD)hwndBouton)
               {
                   PROPSHEETPAGE psp[2];
                   PROPSHEETHEADER psh;
    
                   ZeroMemory(psp, sizeof(psp));
                   ZeroMemory(&psh, sizeof(psh));
    
                   psp[0].dwSize = sizeof(PROPSHEETPAGE);
                   psp[0].dwFlags = PSP_USETITLE ;
                   psp[0].hInstance = hinstance;
                   psp[0]. pszTemplate = "TAB1";
                   psp[0].pfnDlgProc = Tab1Proc;
                   psp[0].pszTitle = "Onglet 1";
    
                   psp[1].dwSize = sizeof(PROPSHEETPAGE);
                   psp[1].dwFlags = PSP_USETITLE;
                   psp[1].hInstance = hinstance;
                   psp[1].pszTemplate = "TAB2";
                   psp[1].pfnDlgProc = Tab2Proc;
                   psp[1].pszTitle = "Onglet 2";
    
                   psh.dwSize = sizeof(PROPSHEETHEADER);
                   psh.dwFlags = PSH_PROPSHEETPAGE | PSH_NOAPPLYNOW;
                   psh.hwndParent = hwnd;
                   psh.pszCaption = (LPSTR) "Propriétés";
                   psh.nPages = sizeof(psp) / sizeof(PROPSHEETPAGE);
                   psh.ppsp = (LPCPROPSHEETPAGE) &psp;
    
                   PropertySheet(&psh);
    
                   InvalidateRect(hwnd,NULL,TRUE);
               }
            return 0;
    
            case WM_CLOSE:
            DestroyWindow(hwnd);
            return 0;
    
            case WM_DESTROY:
            PostQuitMessage(0);
            return 0;
    
            default:
            return DefWindowProc(hwnd, uMsg, wParam, lParam);
    
        }
    }
    /******************************************************************************/
    //Procédure de la premiere boîte de dialogue (premier onglet)
    INT_PTR CALLBACK Tab1Proc(HWND hDlg,UINT uMsg,WPARAM wParam,LPARAM lParam)
    {
        switch (uMsg)
        {
          case WM_INITDIALOG:
              return TRUE;
          case WM_NOTIFY:
              return FALSE;
          default:
             return FALSE;
        }
    }
    
    /******************************************************************************/
    //Procédure de la deuxième boîte de dialogue (deuxième onglet)
    INT_PTR CALLBACK Tab2Proc(HWND hDlg,UINT uMsg,WPARAM wParam,LPARAM lParam)
    {
        switch (uMsg)
        {
          case WM_INITDIALOG:
              return TRUE;
          case WM_NOTIFY:
              return FALSE;
          default:
             return FALSE;
        }
    }

  12. #12
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 382
    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 382
    Points : 41 590
    Points
    41 590
    Par défaut
    C'est pas mal, mais tu me supprimes illico tous les casts sur les chaînes.
    Si tu as besoin de LPTSTR, LPCTSTR, TCHAR, etc., Tu entoures ta chaîne de TEXT().

    PS: D'après les dernières conventions, une procédure de boîte de dialogue n'est pas en BOOL APIENTRY, mais en INT_PTR CALLBACK.

  13. #13
    Membre régulier Avatar de acryline
    Profil pro
    Inscrit en
    Août 2006
    Messages
    200
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 200
    Points : 101
    Points
    101
    Par défaut
    Ok ! Je fais les modif et je teste plus tard là j'ai pas le temps... mais comme c'est illico !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Interop] Wrapper .NET pour les API Windows ?
    Par tomlev dans le forum C++/CLI
    Réponses: 3
    Dernier message: 31/03/2008, 11h31
  2. [C++] 2 petites questions sur l'API Windows
    Par Fabien Henon dans le forum Windows
    Réponses: 15
    Dernier message: 25/12/2007, 12h54
  3. Question pour quelque instruction Windows
    Par ..::snake::.. dans le forum Windows
    Réponses: 4
    Dernier message: 11/06/2007, 15h08
  4. [VB6]j ai besion d aide pour une API windows
    Par leo13 dans le forum VB 6 et antérieur
    Réponses: 15
    Dernier message: 06/06/2006, 18h49
  5. demande de conseils pour l'api windows
    Par altadeos dans le forum Windows
    Réponses: 3
    Dernier message: 28/03/2006, 14h09

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