Partage
  • Partager sur Facebook
  • Partager sur Twitter

question sur l'API win32

Sujet résolu
    7 juillet 2006 à 9:40:23

    bonjours je débute l'API Win32 en C et je galère vraiment beaucoup, sa n'a strictement rien avoir avec les code des cours de matéo.

    Voici un exemple de code qui fait un simple programme :
    #include <windows.h>

    #define IDM_QUIT 1
    #define IDM_OPEN 2

    HINSTANCE hinst;

    LRESULT CALLBACK MainWndProc(HWND, UINT, WPARAM, LPARAM);

    int WINAPI WinMain(HINSTANCE hinstance, HINSTANCE hPrevInstance,
                                                    LPSTR lpCmdLine, int nCmdShow)
    {
        HWND hwnd;
        MSG msg;
        WNDCLASS wc;
        HMENU hMenu, hSousMenu;

        hinst = hinstance;

        wc.style = 0 ;
        wc.lpfnWndProc = MainWndProc;
        wc.cbClsExtra = 0;
        wc.cbWndExtra = 0;
        wc.hInstance = NULL;
        wc.hIcon = NULL;
        wc.hCursor = LoadCursor(NULL, IDC_ARROW);
        wc.hbrBackground = NULL;
        wc.lpszMenuNameNULL;
        wc.lpszClassName = "MaWinClass";

        if(!RegisterClass(&wc)) return FALSE;

        hSousMenu = CreateMenu();
        AppendMenu(hSousMenu, MF_STRING, IDM_OPEN, "Ouvrir...");
        AppendMenu(hSousMenu, MF_SEPARATOR, 0, NULL);
        AppendMenu(hSousMenu, MF_STRING, IDM_QUIT, "Quitter");
        hMenu  = CreateMenu();
        AppendMenu(hMenu,MF_POPUP,(UINT)hSousMenu,"Fichier");

        hwnd = CreateWindow("MaWinClass", "Titre", WS_OVERLAPPEDWINDOW,
                                       CW_USEDEFAULT, CW_USEDEFAULT, 640, 300,
                                                       NULL, hMenu, hinstance, NULL);
        if (!hwnd)  return FALSE;

        ShowWindow(hwnd, nCmdShow);

        while (GetMessage(&msg, NULL, 0, 0))
        {
            TranslateMessage(&msg);
            DispatchMessage(&msg);
        }
        return msg.wParam;
    }
    /******************************************************************************/

    LRESULT CALLBACK MainWndProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
    {
        static HWND hEdit;
        static BOOL EditNotChg = TRUE;
        switch (uMsg)
        {
            case WM_CREATE:
                {
                 HFONT hFont;

                 hEdit = CreateWindow("edit", "Texte", WS_CHILD | WS_VISIBLE |
                                       ES_MULTILINE | ES_WANTRETURN | WS_VSCROLL,
                                               0, 0, 0, 0, hwnd, NULL, hinst, NULL);
                 hFont = (HFONT)GetStockObject(ANSI_FIXED_FONT);
                 SendMessage(hEdit,WM_SETFONT,(UINT)hFont,TRUE);
                 SendMessage(hEdit, EM_SETMARGINS, EC_LEFTMARGIN | EC_RIGHTMARGIN,
                                                                    MAKELONG(5, 5));
                 return 0;
                }

            case WM_CLOSE:
                if(EditNotChg ||
                   MessageBox(hwnd,"Le texte a été modifié.\r\nEtes vous sûr de \
    vouloir fermer l'application ?"

                                ,"Question ?",MB_YESNO | MB_ICONQUESTION ) == IDYES)
                                                                DestroyWindow(hwnd);
                return 0;

            case WM_COMMAND:
                if(LOWORD(wParam) == IDM_OPEN)
                  {
                    OPENFILENAME ofn;
                    CHAR szFile[MAX_PATH]={0};

                    ZeroMemory(&ofn, sizeof(OPENFILENAME));
                    ofn.lStructSize = sizeof(OPENFILENAME);
                    ofn.hwndOwner = hwnd;
                    ofn.lpstrFile = szFile;
                    ofn.nMaxFile = MAX_PATH;
                    ofn.lpstrFilter =
                               "Fichier source C\0*.c\0Fichier source CPP\0*.cpp\0";
                    ofn.nFilterIndex = 1;
                    ofn.Flags =
                           OFN_PATHMUSTEXIST | OFN_FILEMUSTEXIST | OFN_HIDEREADONLY;

                    if (GetOpenFileName(&ofn)==TRUE)
                     {
                        HANDLE hf;
                        DWORD FileSize,nbcharRead ;
                        CHAR *buffer;

                        hf = CreateFile(szFile, GENERIC_READ, 0,NULL,
                                        OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
                        FileSize = GetFileSize(hf, NULL);
                        buffer = (PCHAR)LocalAlloc(LMEM_FIXED, FileSize+1);
                        ReadFile(hf, buffer, FileSize, &nbcharRead, NULL) ;
                        buffer[FileSize] = 0;
                        SendMessage(hEdit, WM_SETTEXT, 0, (LPARAM)buffer);
                        LocalFree(buffer);
                        CloseHandle(hf);
                     }
                  }
                if(LOWORD(wParam) == IDM_QUIT) PostMessage(hwnd, WM_CLOSE,0,0);
                if(HIWORD(wParam) == EN_CHANGE) EditNotChg = FALSE;
                return 0;

            case WM_SIZE:
                 MoveWindow(hEdit, 0, 0, LOWORD(lParam), HIWORD(lParam), TRUE);
                 return 0;

            case WM_DESTROY:
                PostQuitMessage(0);
                return 0;

            default:
                return DefWindowProc(hwnd, uMsg, wParam, lParam);
        }
    }


    Est ce normal que je galère au début?
    Y aurait il quelqu'un qui s'y connait en API et qui pourai me donner son adresse msn pour m'aidez?
    • Partager sur Facebook
    • Partager sur Twitter
    Anonyme
      7 juillet 2006 à 10:46:06

      Citation : el diablo 7

      Est ce normal que je galère au début?


      Oui :D
      C'est très très dur le Win32, alors ne te lances pas tout de suite dedans si tu n'es pas sûr de toi.
      • Partager sur Facebook
      • Partager sur Twitter
        7 juillet 2006 à 10:58:04

        Citation

        sa n'a strictement rien avoir avec les code des cours de matéo.



        Ben si, moi je vois des directives de préprocesseur, des prototypes de fonctions, des fonctions, des variables, des boucles, des conditions etc... :p Il y a juste les types de variables et les fonctions qui changent, ce qui est normal, chaque lib a ses propres types de variables et fonctions ;)
        Faut l'étudier stoo, mais comme a dit louisclem l'API Win32 c'est pas ce qu'il y a de plus facile :)
        • Partager sur Facebook
        • Partager sur Twitter
          7 juillet 2006 à 11:01:51

          Fais du GTK, c'est BEAUCOUP plus simple (il faut 10 lignes pour ouvrir une fenetre, pas 50 !) :p

          Un cours sur GTK sera bientot disponible sur le SdZ, voir ma signature !
          • Partager sur Facebook
          • Partager sur Twitter
            7 juillet 2006 à 11:08:33

            Citation

            Un cours sur GTK sera bientot disponible sur le SdZ, voir ma signature !



            Ouais, en attendeant, il peut déjà commencer par lire le tuto officiel : http://www.gtk-fr.org/wakka.php?wiki=LeTutorial ;)
            • Partager sur Facebook
            • Partager sur Twitter
              7 juillet 2006 à 11:21:23

              merci de vos réponse mais je n'ai pas commencer par GTK car l'interface graphique des fenètres ne me plait pas trop, moi je veut des fenètres de type bloc note, notepad donc avec API Win32.

              Yaurait il quelqu'un qui pourait me donner son add msn en MP pour m'aidez lorsque j'ai des problème en API?
              • Partager sur Facebook
              • Partager sur Twitter
                7 juillet 2006 à 13:09:57

                l'API Win32 est très dur:
                plein de variable, des noms tordus, et le code minimal largement ralonger...
                regarde sur http://www.developpez.com, ya de très très bon tuto pour débutant sur l'API Win32(bien sûr, ça sera plus difficile que l'aprentissage de la SDL).
                • Partager sur Facebook
                • Partager sur Twitter
                  7 juillet 2006 à 13:37:00

                  Déjà ce n'est pas developper.com mais developpez.com ... ensuite arretez de dénigrer l'API win32 puisque vous ne savez evidemment pas assez de quoi vous parlez. Quiconque sait l'utiliser vous dirait -comme moi- que c'est une API comme une autre, certes plus "compliquée" (moi je ne trouve pas qu'elle le soit) que les autres, mais possède l'avantage d'etre exclusivement pour windows (à la fois un avantage et un inconvénient) ce qui permet une couverture des fonctions existantes EXTREMEMENT grande. (voir la bible du winAPIen : msdn.microsoft.com)
                  C'est normal qu'au début tu sois un peu "à la ramasse" mais au fil de tes codes tu vas finir par connaitre par coeur ce code minimal, et l'utiliser à fond.

                  Si tu veux de l'aide, je peux t'en fournir. (envoie moi un MP) Et pour des exemples, va voir du côté de ma signature)

                  Au plaisir :) Kidpaddle2.
                  • Partager sur Facebook
                  • Partager sur Twitter
                    7 juillet 2006 à 13:42:43

                    Ah mon ami kid paddle2, je viens mettre mon grain de sel (qui va le faire raler).

                    Salut,

                    Je te conseil wxWidgets pour faire des interfaces. Il suffit juste d'apprendre le contexte des classes et c'est gagné. C'est plus simple que l'api win32 et pour 80% des cas des fonctions sont deja faites, tu n'as plus qu'a les appliqués.

                    En plus l'interface que tu obtiendra aura le look windows, et sera utilisable sous linux et mac. Et cerise sur le gateau tu n'a aucune dll a joindre au programme pour le faire marché comparé a gtk.

                    Je te le conseil vivement.

                    A+

                    (si ta des questions sur l'installation mp moi)
                    • Partager sur Facebook
                    • Partager sur Twitter
                      7 juillet 2006 à 13:45:11

                      Uims -> :lol:

                      Bon ok je résume alors : si tu as en vue un projet assez simple, utilise wxWidgets (à mon avis le mieux comparé à GTK) ou GTK. Sinon, utilise l'API win32 (aussi dénommée winAPI) qui permet une couverture énorme des fonctionnalités windows.
                      • Partager sur Facebook
                      • Partager sur Twitter
                        7 juillet 2006 à 13:48:10

                        C'est sur que si tu veux faire des trucs tres extravaguants sur windows uniquement tape dans l'api win32. Mais si tu veux une interface comme la majorité des prog bah...wx(regard noir de kid paddle2) :p
                        • Partager sur Facebook
                        • Partager sur Twitter
                          7 juillet 2006 à 13:51:52

                          Arrète tu te fais du mal :p Bon d'accord je précise : si tu veux faire des trucs de gamins utilise wx :lol: Ok ok -> Le winAPI est surtout conseillé dans le cas d'une manipulation autre que visuelle. (qui touche donc à l'OS ou tout ce qui en est proche) Bien que l'utilisation de régions peut vraiment embellir simplement l'appli... (voir mes progs comme d'hab :p )
                          • Partager sur Facebook
                          • Partager sur Twitter
                            7 juillet 2006 à 13:56:25

                            Bon, désoler de m'êtrez planter sur le lien...

                            1èrement:
                            Je connais l'API WINDOWS, j'en fait, donc je sait a peu près de quoi je parle...
                            2èmement:
                            Je n'ai pas dénigrer l'API Win32(au contraire, c'est une API au possibilités étonnantes), j'ai juste dit que c'était plus compliquer que les autres librairies.

                            Pour les noms tordus c'est mon point de vu, mais avec des HANDLES de partout(HINSTANCE, HWND, ...) et des noms incompréhensible(pfnWndProc, ...) on se paume facilement au début...
                            • Partager sur Facebook
                            • Partager sur Twitter
                              7 juillet 2006 à 13:58:05

                              Citation : kidpaddle2

                              Arrète tu te fais du mal :p Bon d'accord je précise : si tu veux faire des trucs de gamins utilise wx :lol:



                              RETRO SATANAS sait tu le nombre de log sympa que tu utilise qui sont fait en wxWidgets (code::blocks, audacity) alors le terme gamin
                              est mal adapté na :p^^
                              • Partager sur Facebook
                              • Partager sur Twitter
                                7 juillet 2006 à 14:32:46

                                Je plaisante voyons :p Regarde ce que j'ai mis plus loin ;) (en plus c'est VADE retro :lol: )

                                Le grand schtroumf -> Je ne parlais pas de toi en particulier, je me doutais que tu en faisais mais à force de trouver des trolls un peu partout sur le site du zero en le dénigrant un max, je commence à être un peu sur les nerfs :p Moi je trouve les handles assez pratiques, et les noms de variable, c'est toi qui les choisit voyons ! C'est juste dans les fichiers templates où les noms ne sont pas supers...
                                Mais bon c'est vrai qu'au début on se demande si on peut y arriver sans aide... Une seule phrase pour ça : accroche toi !
                                Moi je la recommande grandement. (sans partir en troll, ce que nous commençons à faire ;) )

                                Pour ton post, tiens t'en (je pense) à mes 2 et 3emes post (en ignorant le "c'est pour les gamins" c'était pour rigoler pas vrai Uims :p:p
                                • Partager sur Facebook
                                • Partager sur Twitter
                                  7 juillet 2006 à 22:20:18

                                  ok :) .

                                  Au fait je me suis planter je parlais des noms des types de variables, pas des noms de variable ;) .

                                  Je la conseille aussi pour un développement très puissant mais uniquement sous windows (comme, par exemple, un proggramme qui modifie le registre ou qui veut récupérer une image du bureau...).

                                  Au fait je demande au linuxiens (pour me faire pardonner de n'avoir parler que de windows :-° ), s'il existe l'équivalent de l'API WIN32 mais pour Linux???
                                  • Partager sur Facebook
                                  • Partager sur Twitter
                                    7 juillet 2006 à 22:34:53

                                    Eh non. Linux = C !

                                    Bref mais linux a vraiment plusieurs language comme reference : C , Python

                                    Perdu! wxWidgets sait comment modifier le registre !
                                    • Partager sur Facebook
                                    • Partager sur Twitter
                                      7 juillet 2006 à 23:03:12

                                      il sait peut-être y acceder mais les modification a y faire sont différente d'un OS a l'autre, donc au final tu devras faire une modification spécifique pour chaque OS(par exemple, modifier une clé pour qu'un prog se lance au boot)...
                                      • Partager sur Facebook
                                      • Partager sur Twitter
                                        7 juillet 2006 à 23:14:19

                                        merci pour toutes vos réponses, je pense que je vais continuer sur l'API Win32 et comme dit kid à force de codé sa viendra tout seul la compréhension.

                                        Encore merci
                                        • Partager sur Facebook
                                        • Partager sur Twitter
                                          7 juillet 2006 à 23:49:21

                                          De rien ^^'

                                          Sinon j'ai une question, c'est quoi le SDK mac principal (je veux dire par la le "win32" mac, si il existe), il y a un SDK Quicktime, un pour les ports firewire et USB, un pour le kernel debug, etc..
                                          Sauf un pour le système d'exploitation (j'ai regardé du coté de unix (ensemble sys/) mais j'ai rien vus d'intéressant.
                                          Je pense pouvoir modifier une grande partie de ce que je veux avec un simple <system()> mais si je veux faire un programme de control de l'écran a distance, socket + ?.

                                          Merci d'avance :)
                                          • Partager sur Facebook
                                          • Partager sur Twitter

                                          question sur l'API win32

                                          × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                                          × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                                          • Editeur
                                          • Markdown