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 :

debutant api windows en C


Sujet :

Windows

  1. #1
    Membre régulier
    Homme Profil pro
    Ingénieur
    Inscrit en
    Décembre 2006
    Messages
    96
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2006
    Messages : 96
    Points : 88
    Points
    88
    Par défaut debutant api windows en C
    Bonjour

    Pour un futur boulot, je vais programmer des interfaces grahiques en C sous Windows. Je n'ai pas encore d'expérience sur cette plateforme (je programme beaucoup sous Linux et Mac) et j'ai vraiment besoin d'un petit coup de pouce pour démarrer .
    Pour commencer à me familiariser avec l'API, j'ai été voir les tutoriels et tenté de compiler le premier code que j'ai trouvé :
    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
    #include <windows.h>
    
    
    LRESULT CALLBACK MainWndProc(HWND, UINT, WPARAM, LPARAM);
    
    int WINAPI WinMain(HINSTANCE hinstance, HINSTANCE hPrevInstance,
                                                    LPSTR lpCmdLine, int nCmdShow)
    {
        HWND hwnd;
        MSG msg;
        WNDCLASS wc;
    
        wc.style = 0;
        wc.lpfnWndProc = MainWndProc;
        wc.cbClsExtra = 0;
        wc.cbWndExtra = 0;
        wc.hInstance = hinstance;
        wc.hIcon = LoadIcon(NULL, IDI_APPLICATION);
        wc.hCursor = LoadCursor(NULL, IDC_ARROW);
        wc.hbrBackground = (HBRUSH)(1 + COLOR_BTNFACE);
        wc.lpszMenuName =  NULL;
        wc.lpszClassName = "MaWinClass";
    
        if(!RegisterClass(&wc)) return FALSE;
    
        hwnd = CreateWindow("MaWinClass", "Titre", WS_OVERLAPPEDWINDOW,
                                       CW_USEDEFAULT, CW_USEDEFAULT, 400, 300,
                                                       NULL, NULL, hinstance, NULL);
        if (!hwnd) return FALSE;
    
        ShowWindow(hwnd, nCmdShow);
        UpdateWindow(hwnd);
    
    
        while (GetMessage(&msg, NULL, 0, 0))
        {
            TranslateMessage(&msg);
            DispatchMessage(&msg);
        }
        return msg.wParam;
    }
    /******************************************************************************/
    
    LRESULT CALLBACK MainWndProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
    {
        switch (uMsg)
        {
            case WM_CREATE:
    
                return 0;
    
            case WM_DESTROY:
                PostQuitMessage(0);
                return 0;
    
            default:
                return DefWindowProc(hwnd, uMsg, wParam, lParam);
        }
    }
    Il y a d'abord beaucoup d'elements que je ne pige pas : certains mots en majuscules qui me paraissent être des macros.

    J'ai quand même essayé de le compiler sous Linux avec Wine (c'est sensé fonctionner). le code compile, mais l'edition des liens foire :
    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
    /usr/lib/gcc/i486-linux-gnu/4.3.2/../../../../lib/crt1.o: In function `_start':
    (.text+0x18): undefined reference to `main'
    ./main.o: In function `WinMain':
    /home/remi/dev/wintest/Debug/../main.c:25: undefined reference to `LoadIconA'
    /home/remi/dev/wintest/Debug/../main.c:26: undefined reference to `LoadCursorA'
    /home/remi/dev/wintest/Debug/../main.c:31: undefined reference to `RegisterClassA'
    /home/remi/dev/wintest/Debug/../main.c:33: undefined reference to `CreateWindowExA'
    /home/remi/dev/wintest/Debug/../main.c:38: undefined reference to `ShowWindow'
    /home/remi/dev/wintest/Debug/../main.c:39: undefined reference to `UpdateWindow'
    /home/remi/dev/wintest/Debug/../main.c:44: undefined reference to `TranslateMessage'
    /home/remi/dev/wintest/Debug/../main.c:45: undefined reference to `DispatchMessageA'
    /home/remi/dev/wintest/Debug/../main.c:42: undefined reference to `GetMessageA'
    ./main.o: In function `MainWndProc':
    /home/remi/dev/wintest/Debug/../main.c:60: undefined reference to `PostQuitMessage'
    /home/remi/dev/wintest/Debug/../main.c:64: undefined reference to `DefWindowProcA'
    /usr/bin/ld: wintest: hidden symbol `PostQuitMessage' isn't defined
    /usr/bin/ld: final link failed: Nonrepresentable section on output
    collect2: ld returned 1 exit status
    make: *** [wintest] Error 1
    Je pense que c'est parce qu'il ne trouve pas la fonction main, cependant le tutoriel dit que la fonction WinMain est l'équivalent de main avec l'API Windows. Merci de m'eclaircir si possible sur ce point.

    Ensuite j'ai installé VisualC++ Express (ne possedant pas windows, j'ai détourné le PC de mon taf actuel !) afin de le faire avec un outil à priori adapté. cependant, je ne connais pas du tout le logiciel, et je n'arrive pas à creer autre chose que des fichiers C++. Est-ce qu'on peux faire du C sous VC++ ?

    Merci de m'éclairer sur ce point de départ (avec la fonction main) , et si nécessaire me réorienter vers des outils adaptés.

    Merci
    Rémi

  2. #2
    Expert éminent
    Avatar de Melem
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2006
    Messages
    3 656
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 3 656
    Points : 8 389
    Points
    8 389
    Par défaut
    Je te conseille de commencer avec Code::Blocks ou Visual C++ 2008 Express mais je recommande quand même le premier parce que Visual C++, c'est quand même un peu pour les habitués .

    Il y a d'abord beaucoup d'elements que je ne pige pas : certains mots en majuscules qui me paraissent être des macros.
    Oui, ce sont des macros ou des typedef bien sûr .

    Les erreurs que tu rencontres, ça provient du fait que tu ne t'es pas lié aux .lib nécessaires comme kernel32.lib, user32.lib etc. (sous Linux soit doit être libkernel32.a, libuser32.a, etc.). C'est WinMain qu'il faut utiliser mais il faut avant de coder choisir le bon projet (application GUI (WinMain) et non application console (main)).

    Est-ce qu'on peux faire du C sous VC++ ?
    Bien sûr .

  3. #3
    Membre régulier
    Homme Profil pro
    Ingénieur
    Inscrit en
    Décembre 2006
    Messages
    96
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2006
    Messages : 96
    Points : 88
    Points
    88
    Par défaut
    Super ça fonctionne

    merci pour ton aide. Je n'ai pas de template Win32 sous codeblocks linux. c'est pas très grave. j'utilise winegcc pour compiler, et il trouve tout seul les en-têtes et les libs nécessaires.

    J'essaierai sous Windows à l'oocasion.

    Merci encore
    @+
    Rémi

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

Discussions similaires

  1. Réponses: 29
    Dernier message: 14/01/2013, 10h40
  2. [debutant]charger une api windows ?!
    Par ChristopheOce dans le forum Débuter
    Réponses: 6
    Dernier message: 30/10/2007, 11h22
  3. Documentation gratuite sur l'API Windows, COM, DCOM, OLE, etc.
    Par Community Management dans le forum Windows
    Réponses: 1
    Dernier message: 16/11/2006, 15h28
  4. [Debutant][API Windows] Erreur sur SelectObject
    Par coolmaxou dans le forum Windows
    Réponses: 2
    Dernier message: 13/07/2005, 08h06
  5. [debutant] API Windows et MFC
    Par l@rry dans le forum MFC
    Réponses: 2
    Dernier message: 08/06/2005, 09h34

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