Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2736 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  [MFC]Redimensionnement d'un controle picture

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[MFC]Redimensionnement d'un controle picture

n°1328635
katmayes
Posté le 20-03-2006 à 10:09:50  profilanswer
 

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

mood
Publicité
Posté le 20-03-2006 à 10:09:50  profilanswer
 

n°1328762
slash33
Posté le 20-03-2006 à 13:15:07  profilanswer
 

MoveWindow() ?

n°1328788
katmayes
Posté le 20-03-2006 à 13:42:37  profilanswer
 

exactement merci bcp  :bounce:

n°1328837
katmayes
Posté le 20-03-2006 à 14:53:08  profilanswer
 

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

n°1328870
slash33
Posté le 20-03-2006 à 15:42:26  profilanswer
 

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
n°1329265
katmayes
Posté le 21-03-2006 à 09:43:40  profilanswer
 

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
n°1329295
slash33
Posté le 21-03-2006 à 10:37:31  profilanswer
 

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
n°1329311
katmayes
Posté le 21-03-2006 à 10:58:35  profilanswer
 

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...

n°1329317
slash33
Posté le 21-03-2006 à 11:02:23  profilanswer
 

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
n°1329318
katmayes
Posté le 21-03-2006 à 11:04:05  profilanswer
 

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...

mood
Publicité
Posté le 21-03-2006 à 11:04:05  profilanswer
 

n°1329320
katmayes
Posté le 21-03-2006 à 11:05:39  profilanswer
 

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 :)

n°1329324
slash33
Posté le 21-03-2006 à 11:07:10  profilanswer
 

Comment tu as déclaré le OnStart?

n°1329326
katmayes
Posté le 21-03-2006 à 11:07:46  profilanswer
 

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

n°1329331
katmayes
Posté le 21-03-2006 à 11:09:35  profilanswer
 

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

n°1329333
slash33
Posté le 21-03-2006 à 11:10:01  profilanswer
 

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

n°1329334
slash33
Posté le 21-03-2006 à 11:11:16  profilanswer
 

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
n°1329339
katmayes
Posté le 21-03-2006 à 11:15:05  profilanswer
 

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
n°1329341
katmayes
Posté le 21-03-2006 à 11:17:54  profilanswer
 

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

n°1329349
katmayes
Posté le 21-03-2006 à 11:20:34  profilanswer
 

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:  

n°1329350
slash33
Posté le 21-03-2006 à 11:21:24  profilanswer
 

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


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  [MFC]Redimensionnement d'un controle picture

 

Sujets relatifs
redimensionnementModule de Prise de controle à distance
Buffer image et MFC[MFC] Menu dynamique
[MFC]Deplacer dessinPrendre le controle d'un pc par internet via une machine JAVA/VNC
problème à la compilation MFCC++ / MFC executable capricieux
MFC: Radio Button et Group Box[MFC] CListBox récupérer la valeur (non sélectionée)
Plus de sujets relatifs à : [MFC]Redimensionnement d'un controle picture


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR