Interface graphique à partir de fichiers de ressource

Interface graphique à partir de fichiers de ressource - C++ - Programmation

Marsh Posté le 27-07-2005 à 16:56:03    

J'ai à réaliser une interface graphique pour un programme. Mais ce que j'aimerais bien faire, c'est créer une fenètre à partir d'un template situé dans un fichier de ressource. J'ai pas envie de déclarer tous mes contrôles et taper leur CreateWindow() à chacun...  
 
Dans le projet Win32 par défaut de Visual C++ j'ai vu qu'il utilisait une fonction DialogBox() pour afficher une fenêtre définie par un template. Cependant, cette fenêtre était fille d'une fenêtre principale crée avec tout le bataclan RegisterClass, etc.  
 
Ce que je voudrais savoir, c'est si c'est possible de créer sa fenêtre principale de la sorte, en se référant à un fichier de ressource pour les contrôles d'interface et leur placement sur la fenêtre. Et si c'est possible, comment ?

Reply

Marsh Posté le 27-07-2005 à 16:56:03   

Reply

Marsh Posté le 27-07-2005 à 18:35:13    

A l'exception des menus, de l'icône et du titre de la fenêtre (donc un CFrameWnd), l'éditeur de ressource ne te sera pas d'une grande aide. Enfin si quelqu'un sait faire ça, je suis preneur.

Reply

Marsh Posté le 27-07-2005 à 20:22:14    

Dans l'éditeur de source on peut facilement créer des boîtes de dialogue. Je ne vois pas pourquoi on aurait pas le droit d'utiliser ce genre de boîte de dialogue comme fenêtre principale, quand vous faites une interface graphique en C++, vous tappez toute l'affaire ?  
En fait je l'ai déjà fait mais je suis très paresseux :P
Tellement que ça me démange chaque fois d'utiliser Visual Basic... Mais je ne peux pas dans mon cas.

Reply

Marsh Posté le 27-07-2005 à 20:52:47    

Ca fonctionne en utilisant DialogBox(), une fonction raccourci (macro) de Visual C++ qui appelle RegisterClass et CreateWindow pour vous. Ca fonctionne mais c'est pas la solution la plus élégante...
 
Et j'utilise l'API win32 (windows.h), pas MFC. Je vais essayer de me renseigner la dessus d'ailleurs.


Message édité par sausageroll le 27-07-2005 à 21:14:58
Reply

Marsh Posté le 27-07-2005 à 23:10:44    

J'utilise les ressources VC++ pour mes applications et l'APIWIN32.
En utilisant DialogBox(),il faut passer le numéro de ressource avec MAKEINTRESSAOURCE et définir une procédure DialogProc pour intercepter les messages.
 

Code :
  1. int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nCmdShow)
  2. {return DialogBox(hInstance,MAKEINTRESOURCE(IDD_MADIALOGUE),0,MaDialogueProc);
  3. }

Reply

Marsh Posté le 28-07-2005 à 09:01:56    

C'est une boîte de dialogue (CDialog like) ou une fenêtre (CFrameWnd ou dérivée) l'interface principale de ton application?
 
Pour une fenêtre, je ne connais aucun moyen de faire du "tout en un" avec l'éditeur de ressources. Pour un dialogue, tu as CDialog(CWnd* pParentWnd, UINT nTemplateID). Mais l'assistant de Visual te permet de créer une application qui a pour interface principale un dialogue (modal).


Message édité par slash33 le 28-07-2005 à 09:03:03
Reply

Marsh Posté le 28-07-2005 à 11:36:10    

C'est sensé être une fenêtre, et comme je l'ai dit ça fonctionne avec la méthode qu'a présenté CosmoSys. Mais ça m'étonne qu'il n'existe pas une autre fonction du genre.
 
Mais si je suis pas le seul à utiliser DialogBox(), ça me rassure :D
 
Concernant CDialog, c'est une classe qui appartient aux MFC (Microsoft Fondation Classes). Bien que ça ait l'air intéressant à utiliser, je préfère l'API Win32.
 
A ce propos, j'ai trouvé un exemple dans l'aide, qui stipule qu'on peut utiliser une instance du dit CDialog comme fenêtre principale sans inconvénients.
 
J'en convient que c'est pareil avec DialogBox()...
 
Je pense que mon problème est résolu :P
 
Merci tout le monde !

Reply

Marsh Posté le 28-07-2005 à 18:02:56    


tu peux utiliser un autre fonction : il s'agit de  
 
CreateDialog() .
A++

Reply

Marsh Posté le 28-07-2005 à 18:21:51    

adm1n1s7ra7eur a écrit :

tu peux utiliser un autre fonction : il s'agit de  
 
CreateDialog() .
A++


diantre ! mais tu t'arrètes jamais toi [:petrus75]


---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 28-07-2005 à 18:50:37    

Mais non il faut qu'il ai le dernier mot.

Reply

Marsh Posté le 28-07-2005 à 18:50:37   

Reply

Marsh Posté le 29-07-2005 à 01:26:39    

 
c'est grace à mes connaissances  :sol:  .
 
vous voyez : ce n'est pas question d'age ou d'experience :non: .
 
MAIS d'intelligence   :)  
 
:D

Reply

Marsh Posté le 29-07-2005 à 22:46:13    

Une petite information concerna

Code :
  1. Une petite c

Reply

Marsh Posté le 29-07-2005 à 22:49:10    

Excuser, mais j'ai du appuyer sur une mauvaise touche.
Pour revenir à CreateDialog(), on peut l'utiliser mais il est plus compliquer, contrairement à DialogBox() et compagnie, CreateDialog() n'est pas bloquant et donc il faut gérer soit même la bouche de traitement des messages! :pfff:  

Reply

Marsh Posté le 29-07-2005 à 23:30:32    

adm1n1s7ra7eur a écrit :

c'est grace à mes connaissances  :sol:  .


tes quoi ?
 

adm1n1s7ra7eur a écrit :


vous voyez : ce n'est pas question d'age ou d'experience :non: .
 
MAIS d'intelligence:)  
 
:D


de quoi ?


---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 30-07-2005 à 00:22:30    

Citation :


adm1n1s7ra7eur a écrit :
 
c'est grace à mes connaissances  :sol:  .  
 
 
 
tes quoi ?  
 
adm1n1s7ra7eur a écrit :
 
 
vous voyez : ce n'est pas question d'age ou d'experience :non: .  
 
MAIS d'intelligence:)  
   
:D
 
 
de quoi ?


 :kaola:  

Citation :


Excuser, mais j'ai du appuyer sur une mauvaise touche.  
Pour revenir à CreateDialog(), on peut l'utiliser mais il est plus compliquer, contrairement à DialogBox() et compagnie, CreateDialog() n'est pas bloquant et donc il faut gérer soit même la bouche de traitement des messages! :pfff:  


 

Code :
  1. HWND CreateDialog(
  2.   HINSTANCE hInstance_Of_Application, 
  3.   MAKEINTRESOURCE(ID_OF_YOUR_DIALOG_BOX),                     
  4.   HWND hWnd_OF_Parent_window,     
  5.   DLGPROC Your_Procedure
  6.                      );


 la fonction CreateDialog retourne le handle de la boite de dialog  
 
en cas de succes  :)  
 :sol:  


---------------
n'editez pas !!!  
Reply

Marsh Posté le 30-07-2005 à 01:12:05    

adm1n1s7ra7eur a écrit :

[

Code :
  1. HWND CreateDialog(
  2.   HINSTANCE hInstance_Of_Application, 
  3.   MAKEINTRESOURCE(ID_OF_YOUR_DIALOG_BOX),                     
  4.   HWND hWnd_OF_Parent_window,     
  5.   DLGPROC Your_Procedure
  6.                      );


 la fonction CreateDialog retourne le handle de la boite de dialog  
 
en cas de succes  :)  
 :sol:


et après ? t'as pas l'impression de raconter n'importe quoi là ? arrète donc de dire des conneries sur tous les topics sur lesquels tu passes, je vais finir par t'éjecter !
 
cosmosys & sausageroll >> pourquoi vous n'utilisez pas la fonction DialogBoxParam(), qui à mon avis est plus adaptée ?
http://msdn.microsoft.com/library/ [...] xparam.asp


Message édité par Harkonnen le 30-07-2005 à 01:12:29
Reply

Marsh Posté le 30-07-2005 à 01:32:28    

Citation :


et après ? t'as pas l'impression de raconter n'importe quoi là ?  
 
arrète donc de dire des conneries sur tous les topics sur lesquels  
 
tu passes, je vais finir par t'éjecter !  


mais qui entre nous dit les conneries    :heink:   ?
 
c'est toi et tes amis      !!!
 
je sais pas pourquoi vous essayer de m'enerver  :kaola:  
 
en plus ,j'ai essaye d'aider CosmoSys  ,
 
CosmoSys : tu doit savoir que DialogBox et CreateDialog sont  
 
presque similaires , la seule difference c'est dans les valeurs  
 
retournés :o  
 
une derniere fois : fiche moi la paix monsieur Harkonnen S'IL TE  
 
PLAIT .
 
 
 
 
 
 
 


---------------
n'editez pas !!!  
Reply

Marsh Posté le 30-07-2005 à 01:47:09    

adm1n1s7ra7eur a écrit :


une derniere fois : fiche moi la paix monsieur Harkonnen S'IL TE  
 
PLAIT .


 
S'il t'ennuie tu n'as qu'à le dénoncer à un modérateur ;)


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
Reply

Marsh Posté le 30-07-2005 à 01:51:12    

adm1n1s7ra7eur a écrit :


mais qui entre nous dit les conneries    :heink:   ?
 
c'est toi et tes amis      !!!


[:rofl]
 

adm1n1s7ra7eur a écrit :


je sais pas pourquoi vous essayer de m'enerver  :kaola:  
 
en plus ,j'ai essaye d'aider CosmoSys  ,


on n'essaye pas de t'énerver, mais juste de te faire comprendre que tu es à coté de la plaque dans chaque réponse que tu donnes, et je te le prouve :
 

adm1n1s7ra7eur a écrit :


CosmoSys : tu doit savoir que DialogBox et CreateDialog sont  
 
presque similaires , la seule difference c'est dans les valeurs  
 
retournés :o  


tout faux ! DialogBox() créé une boite de dialogue modale, et possédant sa propre pompe à messages. CreateDialog() créé une boite de dialogue non modale et dont la pompe à messages doit être implémentée manuellement.
 

adm1n1s7ra7eur a écrit :


une derniere fois : fiche moi la paix monsieur Harkonnen S'IL TE  
 
PLAIT .


tant que tu raconteras des énormités de ce genre, c'est hors de question que je te fiche la paix


---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 30-07-2005 à 01:52:37    

antp a écrit :

S'il t'ennuie tu n'as qu'à le dénoncer à un modérateur ;)


[:totoz]


---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 30-07-2005 à 11:39:43    

Citation :


adm1n1s7ra7eur a écrit :
 
 
CosmoSys : tu doit savoir que DialogBox et CreateDialog sont  
 
presque similaires , la seule difference c'est dans les valeurs  
 
retournés    
 
 
 
tout faux ! DialogBox() créé une boite de dialogue modale, et possédant sa propre pompe à messages. CreateDialog() créé une boite de dialogue non modale et dont la pompe à messages doit être implémentée manuellement.  
 


ça n'a ete qu'une petite comparaison qui demontre comment utiliser  
 
CreateDialog() pck notre ami CosmoSys a dit :

Citation :


on peut l'utiliser mais il est plus compliquer


a part le cote de la declaraction ,CreateDialog cree une boite de  
 
dialog non modal et DialogBox cree une boite de dialog  
 
modale .pour savoir plus sur les differences , essaie de chercher  
 
sur le NET .


---------------
n'editez pas !!!  
Reply

Marsh Posté le 30-07-2005 à 13:24:30    

Tu continues encore à te prendre la tête Harko? Quel courrage!

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed