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

MFC Discussion :

VC++ 2005 express et application win32.


Sujet :

MFC

  1. #1
    Membre habitué Avatar de benjiprog
    Profil pro
    Étudiant
    Inscrit en
    Septembre 2005
    Messages
    302
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2005
    Messages : 302
    Points : 134
    Points
    134
    Par défaut VC++ 2005 express et application win32.
    Bonjour je viens de compiler un programme qui marche très bien avec Dev C++ mais qui me donne des erreurs avec VC++ 2005 voici le code :
    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
    
    #include<windows.h>
    #define IDM_QUIT 1
    LRESULT CALLBACK MainWndProc(HWND, UINT, WPARAM, LPARAM);
    HINSTANCE hinst;
    /****************************Programme Principal**************************/
    int WINAPI WinMain (HINSTANCE hinstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
    {
    HWND hwnd; /*Handle de la fenetre principal*/
    WNDCLASS wc;
    MSG msg;
     
    hinst=hinstance; /*Handle de l'application (fenetre d'edition)*/
    HMENU hMenu, hSousMenu; /*Handle du menu et sous menu*/
     
    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";
    
    RegisterClass (&wc); /*Enregistrement structure au niveau du systeme*/
    
    hSousMenu=CreateMenu ();
    AppendMenu(hSousMenu, MF_STRING, IDM_QUIT, "Quitter");
    hMenu=CreateMenu ();
    AppendMenu(hMenu, MF_POPUP, (UINT)hSousMenu, "Fichier");
     
     
    /*Creation de la fenetre et de ses differents parametres*/
    hwnd = CreateWindow("MaWinClass", "Titre", WS_OVERLAPPEDWINDOW,
    CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT,
    NULL, hMenu, hinstance, NULL);
     
    if (!hwnd) returnfalse;
    ShowWindow (hwnd, nCmdShow); /*Pour rendre fenetre visible*/
    UpdateWindow (hwnd); /*Rafraichissements*/
    
    while (GetMessage(&msg,NULL,0,0))
    {
    TranslateMessage(&msg);
    DispatchMessage(&msg);
    }
    return msg.wParam;
    }
    /**************************Fonction de traitement des messages********************/
    LRESULT CALLBACK MainWndProc(HWND hwnd, UINT umsg, WPARAM wParam, LPARAM lParam)
    {
    static HWND hEdit;
    bool EditNotChg;
     
    switch (umsg)
    {
    case WM_CREATE:
    HFONT hFont;
    hEdit =CreateWindow("edit", "Vous pouvez écrire",
    WS_CHILD | WS_VISIBLE | ES_MULTILINE | ES_WANTRETURN | WS_VSCROLL,
    0, 0, 0, 0, hwnd, NULL, hinst, NULL);
    SendMessage(hEdit,WM_SETFONT,(UINT)hFont,true);
    /*Envoie d'un message pour limiter les marges a 5 pixels*/
    SendMessage(hEdit, EM_SETMARGINS, EC_LEFTMARGIN | EC_RIGHTMARGIN, MAKELONG(5,5));
    return (0);
     
    case WM_CLOSE :
    /*Si vous avez fini de saisir du texte demmande de sauvegarde avant de quitter*/
    if (EditNotChg || MessageBox(hwnd,"Voulez-vous sauvegarder les changements" 
    " avant de quitter l'application?", 
    "Quitter.",MB_YESNO | MB_ICONQUESTION)==IDYES)
    DestroyWindow(hwnd); /*Fermeture de l'application*/
    return (0); 
     
    case WM_COMMAND :
    if (LOWORD(wParam)==IDM_QUIT) PostMessage(hwnd,WM_CLOSE, 0, 0);
    if (HIWORD(wParam)==EN_CHANGE) EditNotChg=false;
    return (0);
     
    case WM_SIZE :
    /*Si changement de taille fenetre parent alors changement de taille fenetre enfant*/
    MoveWindow(hEdit, 0, 0, LOWORD(lParam), HIWORD(lParam), true); 
    return (0);
     
    case WM_DESTROY :
    PostQuitMessage (0); /*Fermeture de la fenetre*/
    return (0);
     
    default :
    return DefWindowProc(hwnd, umsg, wParam, lParam);
    }
    }
    
    et voilà les erreurs que j'obtients :

    error C2664: 'AppendMenuW' : cannot convert parameter 4 from 'const char [8]' to 'LPCWSTR'
    error C2664: 'CreateWindowExW' : cannot convert parameter 2 from 'const char [5]' to 'LPCWSTR'
    error C2664: 'MessageBoxW' : cannot convert parameter 2 from 'const char [72]' to 'LPCWSTR'
    Pour chaque erreur il me dise en dessous :

    Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast
    et des warnings :

    warning C4311: 'type cast' : pointer truncation from 'HMENU' to 'UINT'
    warning C4244: 'return' : conversion from 'WPARAM' to 'int', possible loss of data
    J'ai pas très bien compris les erreurs ainsi que les warnings.
    Les élèves glandeurs c'est comme le linge, quand il fait beau ca sèche.

  2. #2
    Nouveau membre du Club
    Inscrit en
    Mars 2006
    Messages
    62
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 62
    Points : 38
    Points
    38
    Par défaut
    Le traitement de tes fonctions n'est pas le même entre VC++ et DevC++
    Tu dois réécrire ton source pour que ça compile avec VC++

  3. #3
    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 519
    Points
    41 519
    Par défaut
    badman_nx : ?????

    benjiprog: Deux solutions:
    1. Tu cherches l'option "Character set" dans les propriétés du projets, et tu remplaces "use unicode character set" par "use multibyte character set"
    2. Tu remplaces tes char * par des TCHAR * (en mettant des const partout où tu le peux, au passage) et tes chaînes "blabla" par _T("blabla") . Cela permet de compiler aussi bien en unicode qu'en multibyte (normal)
    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.

  4. #4
    Membre du Club
    Inscrit en
    Avril 2006
    Messages
    92
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 92
    Points : 55
    Points
    55
    Par défaut
    Citation Envoyé par Médinoc
    Tu remplaces tes char * par des TCHAR *
    J'aurais plutot changé les char* en wchar_t*. Quelle est la différence entre wchar_t et TCHAR ?

  5. #5
    Expert éminent sénior

    Homme Profil pro
    pdg
    Inscrit en
    Juin 2003
    Messages
    5 750
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : pdg

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 750
    Points : 10 667
    Points
    10 667
    Billets dans le blog
    3
    Par défaut
    TCHAR vaut soit char soit wchar_t en fonction que UNICODE est défini ou non, ce qui permet de compiler le même code dans les 2 modes simplement en définissant une macro.

  6. #6
    Membre habitué Avatar de benjiprog
    Profil pro
    Étudiant
    Inscrit en
    Septembre 2005
    Messages
    302
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2005
    Messages : 302
    Points : 134
    Points
    134
    Par défaut
    Bonjour, j'ai un fichier .h que je ne comprend pas du tout :
    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
    class CSPATIOTEMPDlg : public CDialog
    {
    /*Construction*/
    public:
     bool genererBMP;
     void GenererFichierBMP();
     void GenererFichierContoursTXT();
     
     int radioCouleur;
     int radioGenererFichier;
     bool stop;
     void AnimeFin();
     void AnimeDebut();
     void TrouverFichier();
     void TrouverIndice();
     bool VerifierExtension();
     void CacherBoutons();
     COptions *AppOpts;
     
     CSPATIOTEMPDlg(CWnd* pParent = NULL); /*Constructeur standard*/
     CString fichierGarde;
     
    // Dialog Data
     //{{AFX_DATA(CSPATIOTEMPDlg)
     enum { IDD = IDD_SPATIOTEMP_DIALOG };
     CStatic m_curseur;
     CStatic m_echelle;
     CStatic m_framegraph;
     CStatic m_frame;
     CString m_exppath;
     //}}AFX_DATA
     // ClassWizard generated virtual function overrides
     //{{AFX_VIRTUAL(CSPATIOTEMPDlg)
     protected:
     virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support
     //}}AFX_VIRTUAL
    // Implementation
    protected:
     
     HICON m_hIcon;
     // Generated message map functions
     //{{AFX_MSG(CSPATIOTEMPDlg)
     virtual BOOL OnInitDialog();
     afx_msg void OnSysCommand(UINT nID, LPARAM lParam);
     afx_msg void OnPaint();
     afx_msg HCURSOR OnQueryDragIcon();
     afx_msg void OnParcour();
     afx_msg void OnValid();
     afx_msg void OnSuivant();
     virtual void OnOK();
     afx_msg void OnAnimsuiv();
     afx_msg void OnPrecedent();
     afx_msg void OnAnimpreced();
     virtual void OnCancel();
     afx_msg void OnOptions();
     afx_msg void OnDetails();
     afx_msg void OnButtonStop();
     afx_msg void OnDestroy();
     afx_msg void OnTimer(UINT nIDEvent);
     afx_msg void OnCoefVisualisation();
     afx_msg HBRUSH OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor);
     afx_msg void OnChangeEdit1();
     afx_msg void OnGenererbmp();
     //}}AFX_MSG
     DECLARE_MESSAGE_MAP()
    };
    //{{AFX_INSERT_LOCATION}}
    Je crois que c'est Classwizard qui est utilisé, enfin je ne connais pas du tout, est ce que vous connaissez un petit tutoriel dessus car j'ai trouver quelque chose la-dessus mais il n'y pas beaucoup d'explication. Puis je ne sais pas ce qu'est la classe Cdialog.
    Merci.
    Les élèves glandeurs c'est comme le linge, quand il fait beau ca sèche.

  7. #7
    Membre du Club
    Inscrit en
    Avril 2006
    Messages
    92
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 92
    Points : 55
    Points
    55
    Par défaut
    Citation Envoyé par Aurelien.Regat-Barrel
    TCHAR vaut soit char soit wchar_t en fonction que UNICODE est défini ou non, ce qui permet de compiler le même code dans les 2 modes simplement en définissant une macro.
    Ah d'accord !
    Et j'imagine du coup que la macro _T c'est la meme chose, _T("blabla") est transformé en L"blabla" en unicode, et en reste "blabla" en multibyte.

    Citation Envoyé par benjiprog
    Bonjour, j'ai un fichier .h que je ne comprend pas du tout : [...]
    Je crois que c'est Classwizard qui est utilisé, enfin je ne connais pas du tout, est ce que vous connaissez un petit tutoriel dessus car j'ai trouver quelque chose la-dessus mais il n'y pas beaucoup d'explication. Puis je ne sais pas ce qu'est la classe Cdialog.
    Merci.
    Ce fichier décrit une classe de type Boite de dialogue (qui hérite donc de la classe de la MFC CDialog)
    Je te conseille d'aller voir une definition de CDialog dans la msdn ou d'aller jetter un oeil ici : http://c.developpez.com/faq/vc/?page=CDialog

  8. #8
    Expert éminent sénior

    Homme Profil pro
    pdg
    Inscrit en
    Juin 2003
    Messages
    5 750
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : pdg

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 750
    Points : 10 667
    Points
    10 667
    Billets dans le blog
    3
    Par défaut
    Citation Envoyé par glKabuto
    Ah d'accord !
    Et j'imagine du coup que la macro _T c'est la meme chose, _T("blabla") est transformé en L"blabla" en unicode, et en reste "blabla" en multibyte.
    voilà, mais _T c'est MFC, en Win32 c'est TEXT.
    Pour boucler la boucle, chaque fonction Win32 qui manipule des strings existe dans une version A et une version W, une macro fait le binging entre les 2:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    #ifdef UNICODE
    #define SetWindowText  SetWindowTextW
    #else
    #define SetWindowText  SetWindowTextA
    #endif // !UNICODE

  9. #9
    Membre du Club
    Inscrit en
    Avril 2006
    Messages
    92
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 92
    Points : 55
    Points
    55
    Par défaut
    OK ^^
    Au fait, Je suppose que A et W sont des initiales, mais de quels mots ?

  10. #10
    Expert éminent sénior

    Homme Profil pro
    pdg
    Inscrit en
    Juin 2003
    Messages
    5 750
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : pdg

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 750
    Points : 10 667
    Points
    10 667
    Billets dans le blog
    3
    Par défaut
    ANSI et WIDE (strings).

  11. #11
    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 519
    Points
    41 519
    Par défaut
    _T est défini aussi dans tchar.h, ainsi que _TEXT.

    Dans les headers windows, les macros _T et TEXT sont définies au même endroit, ainsi _T n'est pas du tout spécifique MFC: C'est seulement plus rapide à taper, mais plus dur à comprendre.

    Au fait: si on utilise les fonctions du C, il ne faut pas seulement définir UNICODE, mais aussi _UNICODE. (UNICODE est utilisé par Windows, _UNICODE par la CRT. Les options du projet de Visual règlent les deux macros d'un coup.
    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.

  12. #12
    Expert éminent sénior

    Homme Profil pro
    pdg
    Inscrit en
    Juin 2003
    Messages
    5 750
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : pdg

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 750
    Points : 10 667
    Points
    10 667
    Billets dans le blog
    3
    Par défaut
    Pour ce que j'en sais, _T ne fait pas partie de Win32.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    #include <windows.h>
    LPCTSTR s = _T( "Hello" );
    error C3861: '_T'*: identificateur introuvable
    Après je ne sais pas si _T est dupliqué par les MFC ou si les MFC utilisent la macro de la CRT. J'aurais dû dire que _T c'est entre autre MFC. De mémoire on la trouve aussi dans wxWidgets.

    Note: la CRT définit _TEXT, pas TEXT

Discussions similaires

  1. Réponses: 3
    Dernier message: 04/07/2007, 16h06
  2. [WIN32] Dll avec VC++ 2005 Express
    Par Bayard dans le forum MFC
    Réponses: 4
    Dernier message: 04/05/2006, 21h17
  3. VC++ 2005 express et application win32.
    Par benjiprog dans le forum Windows
    Réponses: 5
    Dernier message: 25/04/2006, 11h03
  4. Réponses: 3
    Dernier message: 04/10/2005, 09h33
  5. Réponses: 4
    Dernier message: 30/09/2005, 13h21

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