|
Dernière réponse | |
---|---|
Sujet : C++, prog Win32, question simple de débutant ! | |
Moustaaki | ....
et en plus, tu sait rester humble et modeste ! :love: merci à tous pour vos réponses ! [edit]--Message édité par Moustaaki--[/edit] |
Aperçu |
---|
Vue Rapide de la discussion |
---|
Moustaaki | ....
et en plus, tu sait rester humble et modeste ! :love: merci à tous pour vos réponses ! [edit]--Message édité par Moustaaki--[/edit] |
haahhahahaha | deja c pas du tout du C# !
quel dommage pour toi :D :D c la 2eme connerie que tu sort (apres afxdlg.h est pas MFC) :D a la 3eme tu sort :D 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 :sol: :sol: |
gilou |
|
haahhahahaha | petzold rocks ! |
gilou | 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] |
El_gringo |
|
haahhahahaha | vandale |
zubrowka | moi j'ai msdn, si tu veu j'te le passe ! :eek2: :hot: :bounce: :spookie: |
haahhahahaha | si c pas de l'MFC explique moi le debut du fichier :
"// This is a part of the Microsoft Foundation Classes C++ library." |
Moustaaki | 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 ! |
haahhahahaha | pour MFC bien sur (faut preciser bonhomme) |
Moustaaki | #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] |
haahhahahaha | 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 :D |
haahhahahaha | 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 :sarcastic: 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 ;) |
verdoux | 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. |
Moustaaki |
[edit]--Message édité par Moustaaki--[/edit] |
Moustaaki | 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] |
El_gringo | non, j'rigole (marrant, non !? :D )
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 ? |
El_gringo |
|
Moustaaki | 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] |
Moustaaki | si tu ne t'abuse ?
Microsoft Fondation Class, c'est ça, ok ... [edit]--Message édité par Moustaaki--[/edit] |
petoulachi | si je ne m'abuse, les MFC c les bibli de microsoft |
Moustaaki | 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 ! :jap: |
El_gringo | mais t'utilises pas les MFC !? |
Moustaaki | :hot: c'est lourd de bloquer, n'est ce pas ? |
Moustaaki | 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 ! :bounce: [edit]--Message édité par Moustaaki--[/edit] |