Création de fenêtre MFC...

Création de fenêtre MFC... - C++ - Programmation

Marsh Posté le 14-03-2003 à 13:47:04    

Hello !
 
Un petit peu de contexte avant d'en arriver aux questions...
Je bosse sur une appli basée sur les MFC en MDI. Mon but, c'est d'avoir pour un document plusieurs fenêtres filles (original n'est ce pas ;)).
 
Ma première étape fut de réperer ou était crée la fenêtre dans le code d'AppWizard. La seule référence se trouve dans App::InitInstance() à la création du CMultiDocTemplate. J'ai donc remplacé la classe de vue par la mienne (encore sous forme d'ébauche). Jusque la ca va....A peu près...
 
1 - A la création du CMulti(...), la fenêtre est crée automatiquement c ca ??
 
2 - Si je veux plusieurs fenêtres, je fais comment ? Je pensais rajouter à ma class document des membres  pointant sur les différentes vues. Puis, quand le moment est venu, appelé un ShowWindow ou qq chose comme ca....Je prends une bonne direction ou je fais fausse route ?
 
3 - Dans ma classe ChildFrame, fonction PreCreateWindow(CREATESTRUCT& cs), je veux adapter la taille de la fenêtre Child à la taille de la fenêtre app....Je fais comment pour récupérer les infos ? à partir de  HWND  hwndParent ?
 
Bon je crois que ca suffit pour le moment... :)
 

Reply

Marsh Posté le 14-03-2003 à 13:47:04   

Reply

Marsh Posté le 14-03-2003 à 15:09:17    

1)
 
La fenetre est créé dans le Create de CView dont ta fenetre derive.
 
Quand tu fais Ctrl-N (New), un nouveau document et une nouvelle fenetre (associé par CMultiDocTemplate) sont créés et associés (le processus est implementé dans CWinApp:OnNewDocument() en gros)
 
2)
Si t'as qu'un document, c'est une appli single document qu'il faut créer
 
3)
Dans la méthode PreCreateWindow(CREATESTRUCT& cs)
tu écris cs.cx et cs.cy avec la taille désirée.


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

Marsh Posté le 14-03-2003 à 16:32:13    

1 - Ok je pense avoir compris
 
2 - Ben en fait, je veux pouvoir avoir plusieurs doc, chacun associé à plusieurs fenêtres. Donc MDI...En fait je sais rajouter un document (c déjà fait fo cliquer sur new). Mais je voudrais que mon doc ait plusieurs fenêtres....
 
3 - Je sais comment modifier la fenêtre, mon problème c'est que je sais pas comment récupérer la taille de la fenêtre qui contient celle la...
 

Reply

Marsh Posté le 14-03-2003 à 16:52:06    

GetWindowRect(CRect&) sur ta frameWnd

Reply

Marsh Posté le 14-03-2003 à 17:00:10    

J'allais demander comment faire le lien avec la frame...
Pour une fois, j'ai pas été feignant, j'ai regardé dans msdn et je suis tombé sur un truc compréhensible  
BOOL GetWindowRect(HWND hWnd,LPRECT lpRect);
Cool merci pour la réponse à la question 3.
 
Me manque juste quelqu'un qui se dévoue pour m'expliquer la n°2 ;)

Reply

Marsh Posté le 14-03-2003 à 17:05:33    

Arf  
J'ai écris :

Code :
  1. CRect parentRect;
  2. GetWindowRect(cs.hwndParent,parentRect);


 
et le compilo me dis : 'GetWindowRect' : function does not take 2 parameters
 
J'ai pas rêver pourtant : http://msdn.microsoft.com/library/ [...] owrect.asp

Reply

Marsh Posté le 14-03-2003 à 17:07:59    

Euh t utilises les MFC donc utilises comptement lol et pas l api directe
 
Sinon pour les document/vue regarde dans les templates, a partir des templates come mtu l as fait il semble, on peut cree les fenetre qui se retrouve associee avec un doc et une frame

Reply

Marsh Posté le 14-03-2003 à 17:08:42    

CF ma remarque, tu est en MFC pas en API Win32

Reply

Marsh Posté le 14-03-2003 à 17:15:46    

VisualC++ a écrit :

Euh t utilises les MFC donc utilises comptement lol et pas l api directe


 
Utilises comptement lol :??:  
 
Je présume que tu veux dire qu'il faut que j'utilise CWnd::GetWindowRect au lieu de cette fonction mais quand même, je comprends pas cette artie de la phrase ;)
 
Donc question : et je le trouve ou mon objet CFrameWnd dans ma CMDIChildWnd ?
 
EDIT : peut-être avec GetActiveFrame (je recherche de mon côté quand même) J'essaye...
EDIT 2 :
Et ca coince :
je fais  
CFrameWnd* parentWnd = GetActiveFrame;
parentWnd->GetWindowRect(parentRect);
 
et le compilo me dis :
error C2440: 'initializing' : cannot convert from 'class CFrameWnd *(__thiscall CFrameWnd::*)(void)' to 'class CFrameWnd *'  
à la première ligne...
 
EDIT 3 :
:ouch:  une fonction ca prend des parentheses...
Bon ben c bon du coup pour ca...


Message édité par gooopil le 14-03-2003 à 17:58:26
Reply

Sujets relatifs:

Leave a Replay

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