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 :

C++ et Fenetre Windows.


Sujet :

Windows

  1. #1
    Membre habitué

    Homme Profil pro
    Développeur .NET
    Inscrit en
    Septembre 2008
    Messages
    110
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2008
    Messages : 110
    Points : 167
    Points
    167
    Par défaut C++ et Fenetre Windows.
    Salut a tous,
    étant un développez sous Linux avec GTK+. J'ai décider de tenter ma chance sous Windows.

    J'ai jeter un oeil au tutoriel http://melem.developpez.com/tutoriel.../?page=gdi#LIV

    Je suis sous Visuel Studio C++ 2008 Express.

    Mais lorsque je compile le code suivant :

    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
    #include <windows.h>
    
    LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam);
    
    int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
    {
        WNDCLASS wc;
        HWND hWnd;
        MSG msg;
        
        wc.cbClsExtra     = 0;
        wc.cbWndExtra     = 0;
        wc.hbrBackground  = (HBRUSH)(COLOR_WINDOW + 1);
        wc.hCursor        = LoadCursor(NULL, IDC_ARROW);
        wc.hIcon          = LoadIcon(NULL, IDI_APPLICATION);
        wc.hInstance      = hInstance;
        wc.lpfnWndProc    = WndProc;
        wc.lpszClassName  = "Classe 1";
        wc.lpszMenuName   = NULL;
        wc.style          = CS_HREDRAW | CS_VREDRAW;
    
        RegisterClass(&wc);
    
        hWnd = CreateWindow("Classe 1",
                            "Notre première fenêtre",
                            WS_OVERLAPPEDWINDOW,
                            100, 100, 600, 300,
                            NULL,
                            NULL,
                            hInstance,
                            NULL);
    
        ShowWindow(hWnd, nCmdShow);
    
        while (GetMessage(&msg, NULL, 0, 0))
        {
            TranslateMessage(&msg);
            DispatchMessage(&msg);
        }
    
        return (int)msg.wParam;
    }
    
    LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
    {
        switch(message)
        {
        case WM_DESTROY:
            PostQuitMessage(0);
            break;
    
        default:
            return DefWindowProc(hwnd, message, wParam, lParam);
        }
    
        return 0L;
    }
    j'obtiens le message d'erreur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    1>------ Build started: Project: fenetreqindow, Configuration: Debug Win32 ------
    1>Compiling...
    1>main.cpp
    1>c:\users\stephane\documents\visual studio 2008\projects\fenetreqindow\fenetreqindow\main.cpp(18) : error C2440: '=' : cannot convert from 'const char [9]' to 'LPCWSTR'
    1>        Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast
    1>c:\users\stephane\documents\visual studio 2008\projects\fenetreqindow\fenetreqindow\main.cpp(31) : error C2664: 'CreateWindowExW' : cannot convert parameter 2 from 'const char [9]' to 'LPCWSTR'
    1>        Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast
    1>Build log was saved at "file://c:\Users\stephane\Documents\Visual Studio 2008\Projects\fenetreqindow\fenetreqindow\Debug\BuildLog.htm"
    1>fenetreqindow - 2 error(s), 0 warning(s)
    ========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========
    Je n'arrive pas a trouver mes erreurs.
    1iere erreur : comment ca c'est un const?

    2ieme erreur : pourquoi se serait encore un const étant donné que c'est le titre de ma fenetre?

    Merci d'allumer mes lumières!

  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 518
    Points
    41 518
    Par défaut
    Le compilo C++ de visual considère une chaîne littérale comme un tableau constant de char. Malheureusement, ici il te faut un tableau constant de TCHAR, que tu peux obtenir avec la macro TEXT() (ou _T() si <tchar.h> a été inclus).

    Donc:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    wc.lpszClassName  = TEXT("Classe 1");
    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 habitué

    Homme Profil pro
    Développeur .NET
    Inscrit en
    Septembre 2008
    Messages
    110
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2008
    Messages : 110
    Points : 167
    Points
    167
    Par défaut
    Ok, donc c'est la solution pour les 2 problemes de const que j'ai.

    Mais est-ce seulement pour les compilateurs Visual Studio ou ca fait la meme erreur sur d'autres compilateur comme Code::Block?

    Si seulement VS. Pourquoi alors? Est-ce qu'il y a une raison?

    Merci.

  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 518
    Points
    41 518
    Par défaut
    Pour const/non-const, aucune idée.

    Mais pour char/wchar_t, tu auras la même erreur sur Code::Blocks si tu règles le projet en Unicode. Les versions récentes de Visual règlent les projets en Unicode si tu ne dis pas explicitement le contraire, parce que le non-unicode, c'est dépassé.
    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
    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
    Pour le réglage des projets, voir ici. Il est vrai, cependant, qu'il est plutôt conseillé, dans la réalité, de programmer avec les TCHAR plutôt qu'avec les char.

    Mais est-ce seulement pour les compilateurs Visual Studio ou ca fait la meme erreur sur d'autres compilateur comme Code::Block?
    C'est surtout C++ qui n'aime pas le cast implicite de const vers non const, donc tu auras ce même problème quel que soit ton compilateur du moment que tu programmes en C++. En C, tu auras tout au plus un warning, selon les réglages de ton compilateur.

  6. #6
    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 518
    Points
    41 518
    Par défaut
    Mais le message original ne contient aucun warning de const à non-const: Uniquement des warnings de const char * à const wchar_t * (LPWCSTR est un typedef sur ce dernier).
    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.

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

Discussions similaires

  1. Fenetre Windows / Linux
    Par Link3 dans le forum C++
    Réponses: 4
    Dernier message: 14/02/2006, 02h17
  2. [C#] Comment recharger une fenetre windows
    Par nokta dans le forum Windows Forms
    Réponses: 3
    Dernier message: 29/11/2005, 18h54
  3. Le dessin avec VC dans une fenetre windows
    Par ccensam dans le forum MFC
    Réponses: 3
    Dernier message: 03/11/2005, 23h40
  4. Fenetre windows
    Par casafa dans le forum Autres éditeurs
    Réponses: 7
    Dernier message: 25/07/2003, 17h18
  5. [VB6] Listage des fenêtres windows
    Par gg78 dans le forum VB 6 et antérieur
    Réponses: 10
    Dernier message: 27/05/2003, 11h36

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