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 �clair� Avatar de benjiprog
    Profil pro
    �tudiant
    Inscrit en
    Septembre 2005
    Messages
    302
    D�tails du profil
    Informations personnelles :
    �ge : 39
    Localisation : France

    Informations professionnelles :
    Activit� : �tudiant

    Informations forums :
    Inscription : Septembre 2005
    Messages : 302
    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.

  2. #2
    Membre averti
    Inscrit en
    Mars 2006
    Messages
    62
    D�tails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 62
    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
    Avatar de M�dinoc
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 397
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 41
    Localisation : France

    Informations professionnelles :
    Activit� : D�veloppeur informatique
    Secteur : High Tech - �diteur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 397
    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 confirm�
    Inscrit en
    Avril 2006
    Messages
    92
    D�tails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 92
    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 confirm�

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

    Informations professionnelles :
    Activit� : pdg

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 756
    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 �clair� Avatar de benjiprog
    Profil pro
    �tudiant
    Inscrit en
    Septembre 2005
    Messages
    302
    D�tails du profil
    Informations personnelles :
    �ge : 39
    Localisation : France

    Informations professionnelles :
    Activit� : �tudiant

    Informations forums :
    Inscription : Septembre 2005
    Messages : 302
    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.

  7. #7
    Membre confirm�
    Inscrit en
    Avril 2006
    Messages
    92
    D�tails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 92
    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 confirm�

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

    Informations professionnelles :
    Activit� : pdg

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 756
    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 confirm�
    Inscrit en
    Avril 2006
    Messages
    92
    D�tails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 92
    Par d�faut
    OK ^^
    Au fait, Je suppose que A et W sont des initiales, mais de quels mots ?

  10. #10
    Expert confirm�

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

    Informations professionnelles :
    Activit� : pdg

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 756
    Billets dans le blog
    3
    Par d�faut
    ANSI et WIDE (strings).

  11. #11
    Expert �minent
    Avatar de M�dinoc
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 397
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 41
    Localisation : France

    Informations professionnelles :
    Activit� : D�veloppeur informatique
    Secteur : High Tech - �diteur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 397
    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 confirm�

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

    Informations professionnelles :
    Activit� : pdg

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 756
    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