[MFC]Redimensionnement d'un controle picture

Redimensionnement d'un controle picture [MFC] - C++ - Programmation

Marsh Posté le 20-03-2006 à 10:09:50    

Hello,
 
 
en fait ma question est toute simple... comment redimenssionner un contrôle Picture CStatic de type Bitmap ?
 
                                                                 merci de vos réponses :)

Reply

Marsh Posté le 20-03-2006 à 10:09:50   

Reply

Marsh Posté le 20-03-2006 à 13:15:07    

MoveWindow() ?

Reply

Marsh Posté le 20-03-2006 à 13:42:37    

exactement merci bcp  :bounce:

Reply

Marsh Posté le 20-03-2006 à 14:53:08    

pendant que j'y suis.... pour récupérer les coordonnées d'une fenêtre y a une astuce aussi simple aussi ?

Reply

Marsh Posté le 20-03-2006 à 15:42:26    

GetWindowRect() faut peut être faire un ScreenToClient/ClientToScreen des coordonnées retournées.
Bref une petite lecture s'impose mais rien de sorcier (d'ailleurs je réponds de tête).


Message édité par slash33 le 20-03-2006 à 15:45:27
Reply

Marsh Posté le 21-03-2006 à 09:43:40    

Hello,
 
en fait j'avais trouvé ca...mais le prob c'est que les coordonnées retournées changent à chaque image...????!!!!
et mon image se déplace pour au final se retrouver hors champ.....
 

Code :
  1. pStatic->GetWindowRect(WindowRect);
  2. pStatic->MoveWindow(WindowRect.TopLeft().x,WindowRect.TopLeft().y,imgWidth,imgHeight,TRUE);


 
voici le code mais il me parait tout à fait juste....


Message édité par katmayes le 21-03-2006 à 09:44:10
Reply

Marsh Posté le 21-03-2006 à 10:37:31    

Tu appelles ton code à chaque changement d'image ?
 
A quoi sert le code ? Ajuster la vidéo au bord supérieur gauche du champ statique ?
 
Ton code compile ? Comment est déclaré WindowRect ? -> ton code ne devrait pas compiler
 
Voici ma correction. Le ScreenToClient est indispensable car comme l'indique la MSDN:
 
CWnd::GetClientRect() : "lpRect Points to a CRect object or a RECT structure that will receive the screen coordinates of the upper-left and lower-right corners."
 
CWnd::MoveWindow() : "For a top-level CWnd object, the x and y parameters are relative to the upper-left corner of the screen. For a child CWnd object, they are relative to the upper-left corner of the parent window's client area."
 

Code :
  1. CRect rect;
  2. pStatic->GetWindowRect(&rect);
  3. // rect contient les coordonnées écran du champ statique
  4. this->ScreenToClient(&rect);
  5. // rect contient les mêmes coordonnées exprimées dans la zone cliente de la fenêtre
  6. // redimensionne le champ statique pour ajuster la vidéo par rapport au coin supérieur gauche
  7. pStatic->MoveWindow(rect.left, rect.top, imgWidth, imgHeight, TRUE);


Message édité par slash33 le 21-03-2006 à 10:44:55
Reply

Marsh Posté le 21-03-2006 à 10:58:35    

WindowRect et bien sûr déclaré en CRect...mais je voulais pas mettre tout le code..pour moi c'était implicite....donc excuses-moi :)
 
Pour ce qui est du ScreenToClient... le this chez moi n'existe pas quand je l'appelle dans ma fonction CFastInterfaceDlg::OnStartCapture()  
 
Sinon l'ajustement est nécessaire chez moi car je fais un scale x2 sur mon image si l'utilisateur le désire... ce qu'il se passe c'est que en mode normal...pas de prob...quand je scale ok l'image prend la place que j'ai attribué en dimenssionant normalement mon CStatic depuis le compilateur...par contre quand je reviens en normal... le CStatic garde la meme grandeur qu'avant et j'ai mon image plus petite au milieu...avec tout autour un bord gris...

Reply

Marsh Posté le 21-03-2006 à 11:02:23    

Comment ça t'as pas de this ??
 
CFastInterfaceDlg c'est bien un CDialog ? CFastInterfaceDlg::OnStartCapture c'est bien une méthode (gestionnaire d'événement) NON STATIQUE de CFastInterfaceDlg?
 
Si oui, pas de problème. Sinon tu as fait une erreur.


Message édité par slash33 le 21-03-2006 à 11:04:57
Reply

Marsh Posté le 21-03-2006 à 11:04:05    

et bien dans le OnPaint... le this il y est je peux accéder à ces méthodes sans prob... par contre dans le OnStart...le this ne me redonne aucune méthode...

Reply

Marsh Posté le 21-03-2006 à 11:04:05   

Reply

Marsh Posté le 21-03-2006 à 11:05:39    

attend attend... y a un truc bizarre.. en fait dans mon OnStartCapture() en fait le this existe bien.. mais je ne sais pas pourquoi...les méthodes ne sont pas affichées quand je fais this-> ...enfin je vais voir ça....donc no panic :)

Reply

Marsh Posté le 21-03-2006 à 11:07:10    

Comment tu as déclaré le OnStart?

Reply

Marsh Posté le 21-03-2006 à 11:07:46    

ce qu'il faut je passe a ma fonction qui s'occupe c'est le CStatic sur lequel pointe mon this donc....

Reply

Marsh Posté le 21-03-2006 à 11:09:35    

ON_BN_CLICKED(IDC_STOPCAPTURE, OnStopCapture)
 
afx_msg void OnStartCapture();
 
et  
 
void CFast_InterfaceDlg::OnStartCapture()  
 
pour la méthode

Reply

Marsh Posté le 21-03-2006 à 11:10:01    

katmayes a écrit :

attend attend... y a un truc bizarre.. en fait dans mon OnStartCapture() en fait le this existe bien.. mais je ne sais pas pourquoi...les méthodes ne sont pas affichées quand je fais this-> ...enfin je vais voir ça....donc no panic :)


Habituellement ça veut dire que tu as une erreur plus haut et que le code ne compiles pas (ouais on dirait que VC++ fait une vérification à la volée). Mais bon jamais bien compris pourquoi un coup la liste apparaît et la fois d'après non. En ce qui concerne son contenu, il reprend ce qui est déclaré dans les .H

Reply

Marsh Posté le 21-03-2006 à 11:11:16    

katmayes a écrit :

ce qu'il faut je passe a ma fonction qui s'occupe c'est le CStatic sur lequel pointe mon this donc....


... tu remplaces 'this' dans mon code par 'pStatic->GetParent()'


Message édité par slash33 le 21-03-2006 à 11:11:42
Reply

Marsh Posté le 21-03-2006 à 11:15:05    

Code :
  1. pStatic->SetBitmap(HBITMAP(cFrame));
  2.   pStatic->GetWindowRect(&WindowRect);
  3.   CWnd *pClient=pStatic->GetParent();
  4.   pClient->ScreenToClient(&WindowRect);
  5.   pStatic->MoveWindow(WindowRect.left,WindowRect.top,imgWidth,imgHeight,TRUE);


 
et je vais tester....


Message édité par katmayes le 21-03-2006 à 11:16:20
Reply

Marsh Posté le 21-03-2006 à 11:17:54    

ben plus d'image dans mon main form la....

Reply

Marsh Posté le 21-03-2006 à 11:20:34    

bon c'est ok..j'avais dû virer un truc par inadvertance..  
en fait ca marche...c'est cool :)
Merci bcp pour tous tes conseils  :bounce:  

Reply

Marsh Posté le 21-03-2006 à 11:21:24    

Vérifies que ça marche en continu. Je me pose de questions concernant la synchro affichage/mise à jour de l'image (bitmap)

Reply

Sujets relatifs:

Leave a Replay

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