[VISUAL C++]Changer la fenetre principale d'une SDI

Changer la fenetre principale d'une SDI [VISUAL C++] - C++ - Programmation

Marsh Posté le 29-03-2003 à 16:17:20    

Comment changer la fenetre de fond d'une SDI? On a vu qu'il fallait créer une dialog, la mettre en "child", mais ensuite, ca bloque...
 
Comment faire pour remplacer la principale par notre nouvelle dialog???

Reply

Marsh Posté le 29-03-2003 à 16:17:20   

Reply

Marsh Posté le 29-03-2003 à 16:56:49    

Question idiote le S c'est pas pour single et mdi pour multiple?
Ou alors ça ne fonctionne pas comme VB6.

Reply

Marsh Posté le 29-03-2003 à 17:08:19    

ouyi, en effet c pour Single. on n'en veut pas plusieurs ....
 
notre probleme est que l'on aimerait juste remplacer la fenetre principale du sdi (en dessous du menu) par une autre...

Reply

Marsh Posté le 29-03-2003 à 17:17:55    

Pourquoi l'avoir si c'est pour la remplacer.
Je ne connais quasiment pas vc++ mais si tu as besoin que d'une form tu la crée avec l'assistant.
Tu cherches à faire une boite de dialogue ou quelque chose de plus compliqué ?

Reply

Marsh Posté le 29-03-2003 à 17:23:38    

Je viens d'essayer et apparement il faut:
Créer un new projet sdi.
Ajouter une dialog box c'est çà?
 
Sinon si c'est un petit projet, au lieu de choisir sdi ou mdi il existe dialog.


Message édité par amsterdam le 29-03-2003 à 17:27:26
Reply

Marsh Posté le 29-03-2003 à 17:26:40    

amsterdam a écrit :

Je viens d'essayer et apparement il faut:
Créer un new projet sdi.
Ajouter une dialog box c'est çà?


c'est ca, on aimerai remplacer la dialog box qui s'affiche de base par une autre....mais on ne trouve pas la fonction qui permettrait de remplacer la premiere dialog box par une autre...


Message édité par harrysauce le 29-03-2003 à 17:27:02
Reply

Marsh Posté le 29-03-2003 à 17:27:52    

oui, c ca...maintenant, par exemple, creer un bouton sur la premiere dialog ki par exemple remplacera celle-ci par une autre dialog

Reply

Marsh Posté le 29-03-2003 à 17:30:26    

Donc tu as une première form avec un bouton et tu veux afficher via un show la deuxième form en cliquant.
En VB c'est justement show donc regarde si il y a qque chose d'approchant en vc++.

Reply

Marsh Posté le 29-03-2003 à 17:36:50    

amsterdam a écrit :

Donc tu as une première form avec un bouton et tu veux afficher via un show la deuxième form en cliquant.
En VB c'est justement show donc regarde si il y a qque chose d'approchant en vc++.


y'a :
 BOOL Create( LPCTSTR lpszTemplateName, CWnd* pParentWnd = NULL );  
    BOOL Create( UINT nIDTemplate, CWnd* pParentWnd = NULL );
 
 
et :
BOOL ShowWindow  
    ( HWND hWnd, // handle to window  
      int nCmdShow // show state of window ) ;
 
 mais impossible de compiler l'une ou l'autre, on a pas vraiment compris ce qu'etaient : LPCTSTR lpszTemplateName, CWnd* pParentWnd, UINT nIDTemplate et HWND hWnd, dc en fait c pas gagné.....

Reply

Marsh Posté le 29-03-2003 à 17:40:03    

Désolé mais là je passe la main au pros de la prog zindows.
Désolé mais srti de VB y am une grosse quiche. :d
Sinon tu as cherché des tutos sur vc++6 sur le net?


Message édité par amsterdam le 29-03-2003 à 17:41:32
Reply

Marsh Posté le 29-03-2003 à 17:40:03   

Reply

Marsh Posté le 29-03-2003 à 17:45:58    

Reply

Marsh Posté le 30-03-2003 à 14:33:34    

harrysauce a écrit :


y'a :
 BOOL Create( LPCTSTR lpszTemplateName, CWnd* pParentWnd = NULL );  
    BOOL Create( UINT nIDTemplate, CWnd* pParentWnd = NULL );
 
 
et :
BOOL ShowWindow  
    ( HWND hWnd, // handle to window  
      int nCmdShow // show state of window ) ;
 
 mais impossible de compiler l'une ou l'autre, on a pas vraiment compris ce qu'etaient : LPCTSTR lpszTemplateName, CWnd* pParentWnd, UINT nIDTemplate et HWND hWnd, dc en fait c pas gagné.....


MFC Library Reference    
 

Citation :

CDialog::Create
Call Create to create a modeless dialog box using a dialog-box template from a resource.
 
virtual BOOL Create(
   LPCTSTR lpszTemplateName,
   CWnd* pParentWnd = NULL  
);
virtual BOOL Create(
   UINT nIDTemplate,
   CWnd* pParentWnd = NULL  
);
Parameters
lpszTemplateName  
Contains a null-terminated string that is the name of a dialog-box template resource.  
pParentWnd  
Points to the parent window object (of type CWnd) to which the dialog object belongs. If it is NULL, the dialog object's parent window is set to the main application window.  
nIDTemplate  
Contains the ID number of a dialog-box template resource.  
Return Value
Both forms return nonzero if dialog-box creation and initialization were successful; otherwise 0.
 
Remarks
You can put the call to Create inside the constructor or call it after the constructor is invoked.
 
Two forms of the Create member function are provided for access to the dialog-box template resource by either template name or template ID number (for example, IDD_DIALOG1).
 
For either form, pass a pointer to the parent window object. If pParentWnd is NULL, the dialog box will be created with its parent or owner window set to the main application window.
 
The Create member function returns immediately after it creates the dialog box.
 
Use the WS_VISIBLE style in the dialog-box template if the dialog box should appear when the parent window is created. Otherwise, you must call ShowWindow. For further dialog-box styles and their application, see the DLGTEMPLATE structure in the Platform SDK and Window Styles in the MFC Reference.  
 
Use the CWnd::DestroyWindow function to destroy a dialog box created by the Create function.


 
 
A+,


Message édité par gilou le 30-03-2003 à 14:36:11

---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
Reply

Marsh Posté le 30-03-2003 à 15:53:10    

gilou a écrit :


MFC Library Reference    
 

Citation :

CDialog::Create
Call Create to create a modeless dialog box using a dialog-box template from a resource.
 
virtual BOOL Create(
   LPCTSTR lpszTemplateName,
   CWnd* pParentWnd = NULL  
);
virtual BOOL Create(
   UINT nIDTemplate,
   CWnd* pParentWnd = NULL  
);
Parameters
lpszTemplateName  
Contains a null-terminated string that is the name of a dialog-box template resource.  
pParentWnd  
Points to the parent window object (of type CWnd) to which the dialog object belongs. If it is NULL, the dialog object's parent window is set to the main application window.  
nIDTemplate  
Contains the ID number of a dialog-box template resource.  
Return Value
Both forms return nonzero if dialog-box creation and initialization were successful; otherwise 0.
 
Remarks
You can put the call to Create inside the constructor or call it after the constructor is invoked.
 
Two forms of the Create member function are provided for access to the dialog-box template resource by either template name or template ID number (for example, IDD_DIALOG1).
 
For either form, pass a pointer to the parent window object. If pParentWnd is NULL, the dialog box will be created with its parent or owner window set to the main application window.
 
The Create member function returns immediately after it creates the dialog box.
 
Use the WS_VISIBLE style in the dialog-box template if the dialog box should appear when the parent window is created. Otherwise, you must call ShowWindow. For further dialog-box styles and their application, see the DLGTEMPLATE structure in the Platform SDK and Window Styles in the MFC Reference.  
 
Use the CWnd::DestroyWindow function to destroy a dialog box created by the Create function.


 
 
A+,


Merci, mais en fait c'est pas des CDialog qu'on doit créer mais des CFormView, et la la syntaxe n'est plus du tout la meme, y'a 5-6 arguments a passer et j'y capte plus grand chose.....

Reply

Marsh Posté le 30-03-2003 à 16:09:19    

Je viens d'essayer ca :
 

Code :
  1. CWnd* pWnd = new CWnd;
  2. pWnd->Create(_T("fen2" ), "Hi", WS_CHILD | WS_VISIBLE,
  3.        CRect(0, 0, 200, 200), this, IDD_DIALOG2);


 
mais ca marche pas, ca compile mais qd on clique sur le bouton il ne se passe rien
 
 
 
 
J'ai 2 dialog, une de type CFormView (la premiere, créée par visual) et une autre de type CDialog (la classe dérivée est "fen2" ).
L'ID de la seconde est IDD_DIALOG2
 
Le code au dessus est éxecuté qd on clique sur un bouton de la premiere Dialog (la CFormView)

Reply

Marsh Posté le 30-03-2003 à 21:45:37    

up!

Reply

Marsh Posté le 30-03-2003 à 22:10:37    

Euh ta fenetre a creer c une dialog ? Si oui euh pkoi new CWnd ?
 
Pour faire simple:
1 - cree une ressource dialog ds les ressources (a priori tu as deja fait)
2 - ClassWizard > cree une classe associee a la nvelle dialog derivant de type CDialog
3 - dans le code de ton button qui doit affucher la dialog

Code :
  1. CMyDialog dlg;
  2. int iRet = dlg.DoModal();
  3. if (iRet ..)  ... les code au cas ou etc


 
Maintenant si tu veux une boite de dialog qui bloque pas ta SDI/MDI/Dlg derriere faut faire pareil sauf que passe par une thraed qui creera la dlg en elel meme.
 

Reply

Marsh Posté le 31-03-2003 à 03:55:29    

VisualC++ a écrit :

Euh ta fenetre a creer c une dialog ? Si oui euh pkoi new CWnd ?
 
Pour faire simple:
1 - cree une ressource dialog ds les ressources (a priori tu as deja fait)
2 - ClassWizard > cree une classe associee a la nvelle dialog derivant de type CDialog
3 - dans le code de ton button qui doit affucher la dialog

Code :
  1. CMyDialog dlg;
  2. int iRet = dlg.DoModal();
  3. if (iRet ..)  ... les code au cas ou etc


 
Maintenant si tu veux une boite de dialog qui bloque pas ta SDI/MDI/Dlg derriere faut faire pareil sauf que passe par une thraed qui creera la dlg en elel meme.
 
 


voui mais la si on bouge la fenetre de derriere ca va laisser celle qu'on vient de créer par dessus a sa place originelle, spa terrible...

Reply

Marsh Posté le 31-03-2003 à 10:29:16    

Bah deja si t t plus explicite ds ta question aussi :p
 
Car la si je te comprend tu voudrais qu en plus ta dlg ouverte soit positionne vis a vis du cframewnd de ta fenetre originale.
 
Donc la si tu veux faire ca, c'est pa une dlg qu il te faudrait mais une nouvelle cformview, enfin la comem ca en regardant rapidement.

Reply

Marsh Posté le 31-03-2003 à 12:27:59    

VisualC++ a écrit :

Bah deja si t t plus explicite ds ta question aussi :p
 
Car la si je te comprend tu voudrais qu en plus ta dlg ouverte soit positionne vis a vis du cframewnd de ta fenetre originale.
 
Donc la si tu veux faire ca, c'est pa une dlg qu il te faudrait mais une nouvelle cformview, enfin la comem ca en regardant rapidement.


 
Oui moi aussi, j'avais pas compris avec ses histoires de dialog alors qu'il s'agit en fait de CFormView.
 
lapiou> Si tu veux switcher plusieurs CFormView dans une appli SDI, c'est expliqué ici :  
http://www.codeguru.com/doc_view/ScreenSwitch.shtml


---------------
"Dieu a exploité tous nos complexes d'infériorité, en commençant par notre incapacité de croire à notre propre divinité." - Emil Michel Cioran
Reply

Sujets relatifs:

Leave a Replay

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