C++, prog Win32, question simple de débutant ! - Programmation
Marsh Posté le 23-05-2001 à 16:41:11
c'est quoi les mfc ??
je débute en prog windows, j'apprends tout seul et j'ai un peu de mal à tout capter.
Peut-être que je les utilise sans le savoir .
explique moi tout ça, s'il te plait, ça serait bien cool de ta part !
Marsh Posté le 23-05-2001 à 16:45:04
si tu ne t'abuse ?
Microsoft Fondation Class, c'est ça, ok ...
[edit]--Message édité par Moustaaki--[/edit]
Marsh Posté le 23-05-2001 à 16:47:27
on vient de me filer ça sur un forum (programmationworld) :
//si on demande a ouvrir une nouvelle carte case CM_FILEOPEN: //vider le buffer contenant le chemin de la carte szFile[0] = 0; //vider le buffer contenant le titre de la carte szFileTitle[0] = 0; //vider le buffer contenant le nom du répertoire szInitDir[0] = 0; //vider le buffer du filtre de fichier memset (filtreDeFichier, 0, sizeof (filtreDeFichier)); //copier dans le buffer la string du filtre de fichiers strcpy (filtreDeFichier, "Fichiers Cartes DirectX (*.EDX)|*.edx" ); //terminer la string par un 0 filtreDeFichier[37] = 0; //vider le buffer memset(&nomDuFichierOuvert, 0, sizeof(OPENFILENAME)); //definir les paramêtres pour la boite de dialogue open nomDuFichierOuvert.lStructSize = sizeof(OPENFILENAME); nomDuFichierOuvert.hwndOwner = hwnd; nomDuFichierOuvert.lpstrFilter = filtreDeFichier; nomDuFichierOuvert.nFilterIndex = 1; nomDuFichierOuvert.lpstrFile= szFile; nomDuFichierOuvert.nMaxFile = sizeof(szFile); nomDuFichierOuvert.lpstrFileTitle = szFileTitle; nomDuFichierOuvert.nMaxFileTitle = sizeof(szFileTitle); nomDuFichierOuvert.lpstrInitialDir = szInitDir; nomDuFichierOuvert.Flags = OFN_PATHMUSTEXIST | OFN_FILEMUSTEXIST | OFN_HIDEREADONLY; //si on a ouvert correctement un fichier if (GetOpenFileName(&nomDuFichierOuvert)) { //si la carte d'avant a été modifiée if (carteModifiee) { //informer l'utilisateur if (MessageBox (hwnd, "Attention:\nLa carte a été modifiée mais n'a pas été eregistrée, continuer la création d'une nouvelle carte?", "EdiX", MB_OKCANCEL | MB_ICONQUESTION)==IDOK) { strcpy (nomDeLaCarte, szFile); MEDestroyUndoBuffs(); LoadProject (); curlayer = 0; onion = 0; oniondark = 0; carteModifiee = 0; Rejig (); } } else { strcpy (nomDeLaCarte, szFile); MEDestroyUndoBuffs(); LoadProject (); curlayer = 0; onion = 0; oniondark = 0; Rejig (); } } break; //si on sauvegarde la carte case CM_FILESAVE: //si une carte est en cours d'utilisation if (nomDeLaCarte[0] && mappt!=NULL) { //alors si on ne peut sauvegarder if (SaveProject ()) //en informer l'utilisateur MessageBox (hwnd, "Impossible de sauvegarder la carte !", "EdiX", MB_OK | MB_ICONEXCLAMATION); else //indiquer que la carte est modifiée carteModifiee = 0; } break; //si on sauvegarde sous case CM_FILESAVEAS: //si aucune map n'a été ouverte if (mappt==NULL) { //en informer l'utilisateur MessageBox (hwnd, "Aucune carte a sauvegarder !", "EdiX", MB_OK | MB_ICONEXCLAMATION); break; } //vider le buffer contenant le chemin de la carte szFile[0] = 0; //vider le buffer contenant le titre de la carte szFileTitle[0] = 0; //vider le buffer contenant le nom du répertoire szInitDir[0] = 0; //vider le buffer du filtre de fichier memset (filtreDeFichier, 0, sizeof (filtreDeFichier)); //copier dans le buffer la string du filtre de fichiers strcpy (filtreDeFichier, "Fichiers Cartes DirectX (*.EDX)|*.edx" ); //terminer la string par un 0 filtreDeFichier[37] = 0; //vider le buffer memset(&nomDuFichierOuvert, 0, sizeof(OPENFILENAME)); //definir les paramêtres pour la boite de dialogue save as nomDuFichierOuvert.lStructSize = sizeof(OPENFILENAME); nomDuFichierOuvert.hwndOwner = hwnd; nomDuFichierOuvert.lpstrFilter = filtreDeFichier; nomDuFichierOuvert.nFilterIndex = 1; nomDuFichierOuvert.lpstrFile= szFile; nomDuFichierOuvert.nMaxFile = sizeof(szFile); nomDuFichierOuvert.lpstrFileTitle = szFileTitle; nomDuFichierOuvert.nMaxFileTitle = sizeof(szFileTitle); nomDuFichierOuvert.lpstrInitialDir = szInitDir; nomDuFichierOuvert.Flags = OFN_PATHMUSTEXIST | OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT; //si on sauvegarde sous sans problèmes if (GetSaveFileName(&nomDuFichierOuvert)) { //enregistrer le nouveau nom de la carte strcpy (nomDeLaCarte, szFile); //obtenir la taille de ce nom increment = strlen (nomDeLaCarte); while (increment) { //chercher le '.' delimitant l'extantion if (nomDeLaCarte[increment]=='.') break; //réduire l'increment de 1 increment--; } //si le nom ne contient pas l'extension... if (strcmp (nomDeLaCarte+increment, ".edx" ) && strcmp (nomDeLaCarte+increment, ".edx" )) //...alors donner l'extension strcat (nomDeLaCarte, ".edx" ); //si on arrive pas a sauvegarder le fichier... if (SaveProject ()) //...alors en informer l'utilisateur MessageBox (hwnd, "Impossible de sauvegarder la carte !", "EdiX", MB_OK | MB_ICONEXCLAMATION); //sinon indiquer que la carte vient d'être sauvegardée else carteModifiee = 0; } break; //si on importe une carte case CM_FILEIMPORT: //si aucune carte n'a été ouverte, il n'y a rien à importer if (mappt==NULL) break; //vider le buffer contenant le chemin de la carte szFile[0] = 0; //vider le buffer contenant le titre de la carte szFileTitle[0] = 0; //vider le buffer contenant le nom du répertoire szInitDir[0] = 0; //vider le buffer du filtre de fichier memset (filtreDeFichier, 0, sizeof (filtreDeFichier)); //copier dans le buffer la string du filtre de fichiers strcpy (filtreDeFichier, "Bitmap files (*.BMP)|*.bmp|Map Array Layer (*.MAR)|*.mar" ); //terminer la string par un 0 filtreDeFichier[20] = 0; filtreDeFichier[26] = 0; filtreDeFichier[56] = 0; //vider le buffer memset(&nomDuFichierOuvert, 0, sizeof(OPENFILENAME)); //definir les paramêtres pour la boite de dialogue open nomDuFichierOuvert.lStructSize = sizeof(OPENFILENAME); nomDuFichierOuvert.hwndOwner = hwnd; nomDuFichierOuvert.lpstrFilter = filtreDeFichier; nomDuFichierOuvert.nFilterIndex = 1; nomDuFichierOuvert.lpstrFile= szFile; nomDuFichierOuvert.nMaxFile = sizeof(szFile); nomDuFichierOuvert.lpstrFileTitle = szFileTitle; nomDuFichierOuvert.nMaxFileTitle = sizeof(szFileTitle); nomDuFichierOuvert.lpstrInitialDir = szInitDir; nomDuFichierOuvert.Flags = OFN_PATHMUSTEXIST | OFN_FILEMUSTEXIST | OFN_HIDEREADONLY; //si on a reussit à importer correctement if (GetOpenFileName(&nomDuFichierOuvert)) { //on detruit les buffers d'annulation MEDestroyUndoBuffs(); //si on a importé un map layer if (!strcmp ((szFile+strlen(szFile))-4, ".MAR" ) || !strcmp ((szFile+strlen(szFile))-4, ".mar" )) { //ouvrir le fichier marfpt = fopen (szFile, "rb" ); //s'il n'existe pas if (marfpt==NULL) { MessageBox (hwnd, "Erreur lors de l'importation de données de carte, opération annulée", "Importer", MB_OK|MB_ICONEXCLAMATION); break; } //mettre la position du pointeur à la fin de marfpt fseek (marfpt, 0, SEEK_END); //chercher la position de ce pointeur et la sauvegarder dans 'increment' increment = (int) ftell (marfpt); //si l'increment n'a pas la bonne valeur correpondant a la taille souhaitée if (increment!=(largeurCarte*hauteurCarte*2)) { //on ferme le fichier fclose (marfpt); //et on informe l'utilisateur MessageBox (hwnd, "Erreur lors de l'importation de la taille de la carte (mauvaise taille!), abandon", "Importer", MB_OK|MB_ICONEXCLAMATION); //sortir break; } //mettre le pointeur au début du fichier fseek (marfpt, 0, SEEK_SET); //lire données de 1 octet increment fois dans le fichier marfpt et le sauvegarder dans mappt if ((signed)fread (mappt, 1, increment, marfpt)!=increment) { //fermer le fichier fclose (marfpt); MessageBox (hwnd, "Erreur lors de l'importation de la taille de la map", "Importer", MB_OK|MB_ICONEXCLAMATION); //sortir break; } fclose (marfpt); } else { //suivant la réponse de l'utilisateur if (MessageBox (hwnd, "Créer de nouveaux blocks à partir des graphiques importés?", "Importer", MB_YESNO|MB_ICONQUESTION)==IDYES) increment=-1; else increment=0; if (increment==0) if (MessageBox (hwnd, "Remplacer les graphiques existants?", "Importer", MB_YESNO|MB_ICONQUESTION)==IDYES) numblockgfx = 1; //définir le curseur sauvegardeHandleCurseur = SetCursor(LoadCursor(NULL, IDC_WAIT)); if (IMImportBlocks (szFile, increment)) MessageBox (hwnd, "Une erreur s'est produite lors de l'importation des blocks, regardez le fichier d'aide à la section importation\n" "Faute généralement commise:\nLe fichier BMP est compressé\nLe fichier BMP n'a pas le bon nombre de couleur", "Importer", MB_OK|MB_ICONEXCLAMATION); //definir le curseur SetCursor (sauvegardeHandleCurseur); Rejig (); } } carteModifiee = 1; InvalidateAll (); break;
c'est assez énorme, non ?
et en plus ça fout un bordel monstre en post !
[edit]--Message édité par Moustaaki--[/edit]
Marsh Posté le 23-05-2001 à 16:48:36
Moustaaki a écrit a écrit : c'est quoi les mfc ?? je débute en prog windows, j'apprends tout seul et j'ai un peu de mal à tout capter. Peut-être que je les utilise sans le savoir . explique moi tout ça, s'il te plait, ça serait bien cool de ta part ! |
Moi aussi je début et j'apprend tout seul, je suis qu'un p'tit stagiaire !
T en galère on dirait, t presque suppliant, j'aime qu'on me supplie, supplies moi encore un peu...
Marsh Posté le 23-05-2001 à 16:52:32
non, j'rigole (marrant, non !? )
en fait les MFC c des classes fournies avec Visual c++ (surement plein d'autre truc, comme C++ Bulider, ...) qui utilisent les fonction de l'api windows (bibliothèque miscrosoft pour gérer...tout, sous windows !)
Et donc, dans les MFC, t'as une classe héritée de CDialog (CDialog c la classe des boites de dialogue) qui s'appelle CFileDialogue qui sert à exactement ce que tu veux !
cherches dans ta doc (t'as pas msdn !?) tu peux surement utiliser les MFC...
c quoi ton logiciel de développement ?
Marsh Posté le 23-05-2001 à 17:12:40
ouai, j'ai pas msdn ... j'ai pas encore ressus la version complète du logiciel ... mais on la commandée, on est pas completement dans l'ilégal (ça coute que 70F pour nous, en plus).
ouai, je mécarte un peu mais j'ai pas de doc alors je cherche sur l'aide en ligne en général, ça ma aidé à faire une fenetre et son menu sans trop de problème mais pour la boite de dialogue, j'avais plus de mal.
CFileDialoque, donc. merci bien, je vais essayer de trouver le header
moi aussi, je suis un petit stagiaire ! mais j'ai pas la doc
[edit]--Message édité par Moustaaki--[/edit]
Marsh Posté le 23-05-2001 à 17:15:24
Moustaaki a écrit a écrit : ouai, j'ai pas msdn ... j'ai pas encore ressus la version complète du logiciel ... mais on la commandée, on est pas completement dans l'ilégal (ça coute que 70F pour nous, en plus). ouai, je mécarte un peu mais j'ai pas de doc alors je cherche sur l'aide en ligne en général, ça ma aidé à faire une fenetre et son menu sans trop de problème mais pour la boite de dialogue, j'avais plus de mal. CFileDialoque, donc. merci bien, je vais essayer de trouver le header à moin que windows.h suffise ? moi aussi, je suis un petit stagiaire ! mais j'ai pas la doc |
raté
[edit]--Message édité par Moustaaki--[/edit]
Marsh Posté le 23-05-2001 à 17:19:46
Sans doc, pas de salut !
D'ailleurs je suis toujours surpris quand je vois des boîtes qui ont très peu de docs papier (ou alors planquées dans une armoire sous clef).
Voir un type qui code sans doc à coté de lui, ça fout les boules.
Doc papier + CDROM + accès au net, c'est indispensable.
Marsh Posté le 23-05-2001 à 17:22:01
la doc que ta trouve c pour .NET et je ne pense pas que tu a le SDK .NET.
D'ailleur c pas de la prog Win32
en Win32, t'utilise la structure OPENFILENAME que tu passe en arg a GetOpenFileName ou GetSaveFileName.
trouve de la doc sur c fonctions.
Sinon ben t'utilise les MFC.
moi perso j'aime pas et je me fait des classes dans le genre en ce moment mais avec qq truc en mieux
Marsh Posté le 23-05-2001 à 17:24:06
la doc papier... elle peut etre remplacer par celle du PC.
en +, essaye de mettre les 5 Go (sans les videos) de la doc MSDN
Marsh Posté le 23-05-2001 à 17:26:28
#include <afxdlgs.h>
argl :
e:\hugo\programs\microsoft visual studio\vc98\mfc\include\afxv_w32.h(14) : fatal error C1189: #error : WINDOWS.H already included. MFC apps must not #include <windows.h>
ça veut dire que je n'était pas en train d'utiliser MFC !
ARGL !
j'ai suivi le programme generic décrit sur msdn.microsoft.com et ça utilise pas MFC, apparement.
[edit]--Message édité par Moustaaki--[/edit]
Marsh Posté le 23-05-2001 à 17:29:09
pour MFC bien sur (faut preciser bonhomme)
Marsh Posté le 23-05-2001 à 17:32:46
je n'ai pas ces cds ....
j'ai qu'un copie du premier cd (que l'instal), j' attends de recevoir le pack en entier.
pour l'instant, je n'ai que la doc du net, donc je compte un peu sur vous !!
je vais essayer ce que dit le rigolard (hahahahhahhahhahahh)
merci ! à plus !
Marsh Posté le 23-05-2001 à 22:13:10
si c pas de l'MFC explique moi le debut du fichier :
"// This is a part of the Microsoft Foundation Classes C++ library."
Marsh Posté le 25-05-2001 à 09:39:08
Verdoux a écrit a écrit : Sans doc, pas de salut ! D'ailleurs je suis toujours surpris quand je vois des boîtes qui ont très peu de docs papier (ou alors planquées dans une armoire sous clef). Voir un type qui code sans doc à coté de lui, ça fout les boules. Doc papier + CDROM + accès au net, c'est indispensable. |
G pas de doc papier, c grave docteur ?
Marsh Posté le 26-05-2001 à 03:49:22
Moustaaki,
Ce que tu as demarre est tres bien, si tu apprends Windows, utilises l'API windows, et evites dans un premier temps d'utiliser les MFC.
C'est un peu plus lourd, mais tu comprendras mieux ce que tu fais, et si un jour tu passes sur une autre plateforme (X-windows par exemple), tu verras que les principes de base sont les memes (meme si l'API X-Windows est mieux concue que celle a Bilou, mais ca, c'est pas une surprise).
Recuperres d'occase un bouquin de Petzold, l'API change assez peu (sauf le passage Wn3.1-->Win95), et la majorite des exemples devraient encore tourner.
Les MFC ca permet d'ecrire du code plus rapidement, mais ca a des limitations, comme toute Framework, et la mecanique qui fait tourner les MFC a coup de macros et autres globales cachees est pas des plus clean.
A+,
[edit]--Message édité par gilou--[/edit]
Marsh Posté le 26-05-2001 à 07:17:58
petzold rocks !
Marsh Posté le 26-05-2001 à 08:22:40
Moustaaki a écrit a écrit : Est-ce que quelqu'un connait les fonctions et les fichiers d'en-tête pour utiliser une boite d'ouverture ou/et de sauvegarde de fichier. J'ai trouver en faisant une recherche sur kro$oft deux classes OpenFileDialog et SaveFileDialog. Cependant, ces documents n'indiquent pas les fichiers d'en-tête, il n'indiquent même pas si c'est pour le C++ . voilà la page si vous comprenez mieux que moi : http://msdn.microsoft.com/library/ [...] stopic.htm quelqu'un pourrait éclairé ma lanterne de débutant qui a bien du mal avec son petit pétrole à 2 sous. Merci d'avance et à plus ! |
Ni du C ni du C++: c'est du C#, la nouvelle cochonnerie proprietaire et fortement pompee sur java a Bilou.
A+,
Marsh Posté le 26-05-2001 à 15:01:18
deja c pas du tout du C# !
quel dommage pour toi
c la 2eme connerie que tu sort (apres afxdlg.h est pas MFC)
a la 3eme tu sort
voila, c pas du C# c le framework .NET et tu peux tres bien l'utiliser avec C++ ou VB et je l'ai dit plus haut
jsuis bo, fort et intelligent
Marsh Posté le 28-05-2001 à 14:21:39
....
et en plus, tu sait rester humble et modeste !
merci à tous pour vos réponses !
[edit]--Message édité par Moustaaki--[/edit]
Marsh Posté le 23-05-2001 à 16:15:21
Est-ce que quelqu'un connait les fonctions et les fichiers d'en-tête pour utiliser une boite d'ouverture ou/et de sauvegarde de fichier.
J'ai trouver en faisant une recherche sur kro$oft deux classes OpenFileDialog et SaveFileDialog. Cependant, ces documents n'indiquent pas les fichiers d'en-tête, il n'indiquent même pas si c'est pour le C++ .
voilà la page si vous comprenez mieux que moi :
http://msdn.microsoft.com/library/ [...] stopic.htm
quelqu'un pourrait éclairé ma lanterne de débutant qui a bien du mal avec son petit pétrole à 2 sous.
Merci d'avance et à plus !
[edit]--Message édité par Moustaaki--[/edit]