Creation d'une MenuBar sous MPW

stebar

Membre confirmé
5 Mars 2004
28
0
Visiter le site
Bonjour !
Je débute la programmation en C sous MPW. J'arrive a créer ma fenêtre avec NewCWindow(); et de la placer avec la dimension que je veux, mais ce que je n'arrive pas a faire c'est de creer un MenuBar !

Tout les aides que je trouve concernes les ressources. Je comme je n'y comprends strictement rien avec les ressources, j'aimerais savoir si il était possible de se débrouiller sans avoir de liens avec.

Est-ce possible de creer une menubar sans ressource premièrement ? Si non, Quelqu'un sait comment fonction ResEdit ? Je l'ai téléchargé, mais mon projet en C ne semble pas etre en mesure de lire mon fichier de ressources, peut-etre que je m'y prend mal !

Merci de bien vouloir aider un pauvre débutant !

Bonne journée !

ste.
 
Moi je me rappelle, j'avais essayé de programmer avec MPW, il y a pas mal de temps... J'ai laissé tomber. C'est un peu archaïque tout ça.

D'après le peu que j'ai compris, tu dois avoir des fichiers resources texte (peut-être en '.r', cf. the REZ language) et des fichiers resources compilés (.rsrc ?). Voilà, ensuite en général les fichiers resources définissent des identifiants qu'il faut réutilisé dans ton code avec des '#define'.

ResEdit permet d'afficher le contenu de la "resource fork" d'un fichier. Tu dois pouvoir créer des fichiers resources avec ResEdit, normalement ton interface et tout et tout...

Mais, hélas (heureusement en fait) je n'ai jamais fait cela. Je ne peux pas vraiment t'aider.
sick.gif


Es-tu vraiment obligé de programmer avec MPW?
C'est tellement plus simple avec xCode/IB en ObjC par exemple.
Peux-être n'as-tu pas le choix?

A+
wink.gif
 
Merci..
J'ai compris y'a quelques minutes en vérifiant que je pouvais compiler un .r avec MPW en utilisant REZ inclus dans MPW ! Mais la, je ne sais strictement pas a quoi sert mon fichier !
sick.gif
Je suis pas plus avancé !
wink.gif


Pour la raison d'utilisé MPW, c'est la gratuité du développement !
up.gif

Est-ce que se dont tu me parle est aussi gratuit ? Étant donné que c'est un vieu LCIII avec un MacOS 7.5 dessus, je ne veut pas investir vraiment d'argent sur quelque chose pour développer comme passe temps !
zen.gif


Merci si tu peux m'eclairer !

bye !

ste.
 
J'ai fait ça il y a bien longtemps
laugh.gif


Resedit te permet de créer ton fichier de ressources relativement visuellement et, autant que je me rappelle, peut te sortir directement le fichier "compilé" rsrc. Sinon, tu peux le créer avec un éditeur de texte et le "compiler" avec Rez.

Ensuite, c'est au niveau du link qu'on rajoute le fichier ressources dans l'appli (le Rez peut se faire à ce moment-là d'ailleurs)

Ensuite on utilise dans le texte du programme les ressources au travers des API de MacOS

Par exemple en pascal, j'avais des trucs du genre (mais c'était bien avant le 7,5, la gestion a changé un peu après il me semble) :

PROCEDURE installmenus;

VAR
index : integer;

begin
menulist[1] := getmenu(IDmenupomme);
menulist[2] := getmenu(IDmenuFich);
menulist[3] := getmenu(IDmenuEdit);
menulist[4] := getmenu(IDmenuExec);
menulist[5] := getmenu(IDmenuOption);
addResMenu(menuList[1],'DRVR');
for index := 1 to menucnt do
insertmenu (menulist[index],0);
drawmenubar;
end;

Les IDmenu étaient des codes des ressources tels que définis dans le fichier de ressources.

Tout ça, c'est juste pour te donner une idée mais la bonne technique, c'est de chercher des exemples simples, soit chez apple, soit chez Mactech ou ailleurs et éventuellement de récupérer la version en ligne de inside mac ou équivalent. À partir d'un exemple simple, tu peux avancer.

je ne peux pas te donner de liens de suite, je n'ai pas trop le temps.
laugh.gif


Sinon, MPW est un outil pas franchement convivial mais intège des outils très puissants et un langage de commande qui ne l'est pas moins. Mais c'est sûr que c'est plus rapide avec les nouveaux outils.
 
Bonsoir Luc !

Merci de votre réponse !
smile.gif


Bien, le problème, c'est que je pars justement d'example !
smile.gif

par exemple, il y a un fichier .r un fichier .h et un fichier .c !

le fichier .c a un #include du fichier .h et le fichier .h a un include du fichier .r.
Mais le fichier .r ne semble pas etre compiler parce que je peux le lire a partir du MPW Shell..
Alors la, j'essaie de trouver comment linker le fichier resource au projet C mais je ne trouve vraiment rien ! Même dans Inside Macintosh je n'arrive pas a m'en sortir ! Je commence a croire que toute les années passé a developper en Visual Basic ou Visual C++ ne m'ont pas aider a comprendre le fondement de la programmation !
crazy.gif


Je blague, mais est-ce que tu peux me dire a quoi sert de compiler le fichier resource ? Est-ce vraiment utile ? Par exemple, j'ai creer un petit fichier .rsrc qui contenait les parametres de WIND.
j'ai compiler avec REZ comme ceci :
'rez Types.r test.rsrc -o test'
il m'a donner un fichier test
mais alors la, quoi faire avec ce fichier pour qu'il soit intégré a mon fichier .C, je suis perdu !

Merci de votre aide.

bye !

ste.
 
REZ sert à convertir ton fichier texte '.r' en fichier resource '.rsrc' au format spécifique du contenu des resource forks.

Il s'agit de définitions de resources typées identifiées par des ids. en général le '.h' #includes un '.r' pour récupérer directement les bons 'ids' à utiliser dans ton code.

Au moment de l'édition des liens le linker doit placer les resources 'compilées' dans la resource fork du fichier produit. Tu peux examiner son contenu avec ResEdit.

Je ne peux pas trop t'en dire plus...
wink.gif

J'ai jamais fait...
tongue.gif
 
stebar a dit:
Bonsoir Luc !
Je blague, mais est-ce que tu peux me dire a quoi sert de compiler le fichier resource ? Est-ce vraiment utile ? Par exemple, j'ai creer un petit fichier .rsrc qui contenait les parametres de WIND.
j'ai compiler avec REZ comme ceci :
'rez Types.r test.rsrc -o test'
il m'a donner un fichier test
mais alors la, quoi faire avec ce fichier pour qu'il soit intégré a mon fichier .C, je suis perdu !

Je n'avais plus suivi ce fil (je suis un peu trop occupé en ce moment). Je vais éviter de rentrer dans les détails parce que c'est un peu loin et que j'ai toujours utilisé ça sans me prendre la tête. Latortue t'a expliqué le principe.

Voici un exemple de link intégrant un fichier ressources (SIOW est l'interface standard d'une appli basique) :

Link -d ?
{LinkPourGros} -t 'APPL' {Createur}{LinkPourDebug} "{DossierTravail}{Source}.o" ?
"{Libraries}Interface.o" ?
"{Libraries}SIOW.o" ?
"{Libraries}Runtime.o" ?
"{PLibraries}PasLib.o" ?
"{PLibraries}{SANELib}" ?
-o "{DossierTravail}{Applic}"
Rez -a "{MPW}Interfaces:RIncludes:SIOW.r" -o "{DossierTravail}{Applic}"

C'est du pascal, les noms entre accolades sont des variables correspondant à des chemins d'accés.

En fait, tu peux construire ta commande d'éditeur de liens (y compris pour les ressources) automatiquement en utilisant les outils make et build. Regarde les ou regarde des exemples qui les utilisent. Il suffit de définir les fichiers sources que tu utilises et MPW construira les bonnes commandes.

Si j'ai le temps, j'essaierai de t'en dire plus un de ces jours
zen.gif
 
ok, je vois quelques exemple avec un link.

Sauf que la, je me demande !

Est-ce que y'a un endroit ou je peux savoir a quoi sert chaques .o ? Par exemple interfaces.o Runtime.o et etc ?

Parce que par exemple, j'ai un exemple ou il y a seulement 2 .o a inclure et je me demandais pourquoi Luc tu en avait autant ?

Merci de m'éclairer sur le sujet !

up.gif

Ma finir par comprendre !
rateau.gif
 
Les .o, c'est simplement les librairies compilées incluses dans le projet. Suivant ce que tu fais et les outils que tu utilises (il y a eu plusieurs versions même chez apple, certaines avec beaucoup de petites librairie, d'autes avec peu de grosses), il y en a plus ou moins (par exemple paslib était la librairie standard pascal, sane la librairie pour les calculs en flottants, SIOW pour avoir l'interface basique d'une appli, etc.) Evidemment, le link ne chargera dans la librairie prévue que ce qu'il faut (rien éventuellement).

L'outil make se débrouille pour te mettre les .o qu'il faut.
 
ok, mais si je ne veux pas utiliser de make, est-ce possible de savoir quelle librairie utiliser ?

J'ai essayer ceci :
sample.c avec sample.r et sample.h.
J,ai compiler mon sample.r en sample.rsrc
ensuite je compile mon sample.c qui va devenir un sample.c.o grace a un SC -r sample.c
par la suite, je link mon .rsrc avec mon .c.o avec la commande link ?

et ensuite je double-click sur mon fichier executable et ca va marcher ?

merci !

bye

ste.
 
ça dépend de ce que tu utilises dans ton programme, des include que tu fais. Je n'ai jamais fait de C sous MPW (ou alors j'ai oublié
laugh.gif
). En principe on avait besoin de la runtime. Pour le reste, j'utilisais par exemple des fonctions mathématiques qui étaient dans la bilbliothèque SANE. Son interface est dans les PInterfaces sous le nom Sane.p, j'incluais l'interface dans le source et je linkais la bibli en linkant Sane.o.

Pour C, c'est un peu le même style : dans le dossier "examples" d'une de mes versions de C, j'ai un exemple de makefile qui se termine par le link suivant (pour un 68000) :

ount.68k ƒƒ {OBJS}
Link -d -c '????' -t APPL -map > Count.68k.map ?
{SymOpt} ?
{OBJS} ?
"{CLibraries}"StdCLib.o ?
"{Libraries}"SIOW.o ?
"{Libraries}"IntEnv.o ?
"{Libraries}"MacRuntime.o ?
"{Libraries}"Interface.o ?
-o {Targ}

Count.68k ƒƒ "{RIncludes}"SIOW.r
Rez -a "{Rincludes}"SIOW.r -o {Targ}

LaStdCLib, c'est la lib normale du C ; SIOW c'est la gestion de l'interface minimale (fenêtre terminal avec possibilité de sauver ; MacRuntime, c'est nécessaire ; IntEnv, c'est une bibli habituelle pour MPW. Son interface est dans CIncludes (intenv.h).

Ceci dit je te conseille d'utiliser make : tu fais un "create build comments..." dans le menu build et tu n'as plus qu'à donner tes sources, il te construit la compil et le link
 
Vu que je ne suis pas sûr de bien avoir répondu à ta question
laugh.gif
, je te reprécise que pour les ressources, il suffit de linker le résultat de la "compilation" par Rez. Je ne sais plus si la présence de ressources impose le chargement d'une librairie (pour les types standards, peut-être) mais de toutes façons, si c'est le cas, c'est une des bibliohèques basiques qui sont dans l'exemple ci-dessus (et de toutes façons, MPW ne s'en servira pas si ce n'est pas nécessaire).

PS. je m'excuse de ne pas être très clair mais d'une part, ça relève un peu de l'archéologie
laugh.gif
et d'autre part, j'ai eu une semaine très chargée.
zen.gif
 
Merci Luc de ta precieuse aide. Même si desfois je ne comprend pas toujours !
laugh.gif

Sans blague, tes informations me sont d'une grande utilité même si tu dis que tu n'as pas le temps !
up.gif


Bon, voilà ou j'en suis !
smile.gif

J'ai fait un example un petit quelque chose qui ne fesait qu'afficher une fenetre. !
J'ai mon fichier .r et mon fichier .c que j'inclus lors du create build command en mode 68k et de type applications.

Un fois ceci fait !
je fait un CreateMake.
et bon, voilà, il me cree mon fichier resource apres le link. est-ce normal ? Il me fait un Rez a la fin de tout !

Bon, je me dit, ok, MPW c'est ce qu'il doit faire quand même !
zen.gif


Je laisse rouler et lorsque j'execute mon application, pouff, aucune fenetre ne s'affiche ! Bizarre ca ! Pourtant il serait censé prendre mon fichier resource pour définir ma fenetre non !
mon ID est bon.. tout semble etre convenable, j'ai pris des examples de plusieurs fichiers sources.

Si tu peu m'éclaircir sur le sujet, je te faxerai une bonne biere froide en guise de remerciement !
sick.gif


bye !

ste.
 
stebar a dit:
et bon, voilà, il me cree mon fichier resource apres le link. est-ce normal ? Il me fait un Rez a la fin de tout !

C'est pas un problème pourvu que le résultat du rez soit "rangé" dans le code linké, c'est à dire dans le fichier qui a déjà reçu le résultat de la compilation du source (ce que tu vois normalement par la cible du rez).

stebar a dit:
Je laisse rouler et lorsque j'execute mon application, pouff, aucune fenetre ne s'affiche ! Bizarre ca ! Pourtant il serait censé prendre mon fichier resource pour définir ma fenetre non !
mon ID est bon.. tout semble etre convenable, j'ai pris des examples de plusieurs fichiers sources.
ste.

Comme je te l'ai dit, c'est loin et je n'ai pas trop le temps de réfléchir pour éviter de dire des conneries
laugh.gif
Mais es-tu sûr que tu ais fait toutes les bonnes initialisations : il se peut (ça me semble même probable) que ton fichier rsrc soit bon mais que tu n'ais pas "demandé" son utilisation dans le source du programme. À titre d'exemple, et sans aucune garantie, voilà une version de la fonction "Init" que j'utilisais pour démarrer mon truc :

procedure init;

begin
initgraf(@theport);
initfonts;
initwindows;
initmenus;
teinit;
initdialogs(nil);

getindstring(txtenr[rien],IDtxtenr,1);
...
installmenus;
handleMenuFichier := menulist[MenuFichiers];
...
hscrap:=newhandle(0);
controle_scrap;
...
getwmgrport(screenport);
setport(screenport);
setcursor(arrow);
showcursor;
apropos;
end;

Il me semble que j'avais eu des problèmes au départ parce que je n'initialisais pas correctement le port ou des trucs comme ça. Le problème, c'est aussi qu'il y a eu, il me semble, des variations sur les initialisations "par défaut" à mesure que les biblis ont évolué. Tu as pris un exemple donné avec MPW qui ouvrait une fenêtre ? tu l'as testé ?

Bon courage : on galère un peu au départ, après ça paraît évident (et après on oublie
laugh.gif
).
 
Bonne nouvelle, tout semble merveilleusement bien fonctionner !
Grace a votre precieuse aide, qui, sans vous j'imagine que je serais encore en train de me demander c'est quoi MPW !
laugh.gif



Luc G a dit:
Bon courage : on galère un peu au départ, après ça paraît évident (et après on oublie
laugh.gif
).

J'ai cru remarqué, mais je dois dire que ce fut ma première expérience en ce qui touche la programmation Macintosh ! Elle ne fut pas pour le moin déplaisante, mais je crois que j'ai trop de Visual Basic en mois
crazy.gif


Merci de votre aide ! vous êtes fort même si vous dite que ca fait longtemps que vous n'y avez pas touché !

un gros merci !

bye

ste.