J'ai un problème curieux.
J'ai une variable TabCtrl qui dérive de CTabCtrl dans le mainframe.
elle s'affiche très bien.
Si j'utilise la première version de OnSize, je ne peux pas
redimensionner la fenêtre d'application.
Si j'utilise la deuxième version, cela marche.
Pourtant, en utilisant le debugger, RectUtile et rr contiennent
exactement les mêmes valeurs!
Merci d'avance
void CMainFrame::OnSize(UINT nType, int cx, int cy)
{ CMDIFrameWnd::OnSize(nType, cx, cy);
CRect RectUtile,rt;
GetClientRect() attend comme apramètre un LPRECT, pas un CRect.
Quand tu fais un CRect x(a,b,c,d); le constructeur initialise les membres de x, pas quand tu fais CRect x; tout court. Dans ton second cas RectUtile possède des membre initialisés. Dans ton premier cas non.
Plus l'erreur de type.
-- Arnold McDonald (AMcD) - Help #35/2006
http://arnold.mcdonald.free.fr/
GetClientRect() attend comme apramètre un LPRECT, pas un CRect.
Quand tu fais un CRect x(a,b,c,d); le constructeur initialise les membres de
x, pas quand tu fais CRect x; tout court. Dans ton second cas RectUtile
possède des membre initialisés. Dans ton premier cas non.
GetClientRect() attend comme apramètre un LPRECT, pas un CRect.
Quand tu fais un CRect x(a,b,c,d); le constructeur initialise les membres de x, pas quand tu fais CRect x; tout court. Dans ton second cas RectUtile possède des membre initialisés. Dans ton premier cas non.
Plus l'erreur de type.
-- Arnold McDonald (AMcD) - Help #35/2006
http://arnold.mcdonald.free.fr/
JM
Ah? Je pensais que les mfc se démmerdaient avec tout ça, et vu que j'ai repris en partie un exemple vu sur un autre forum. Je vais tester pour voir.
Ceci dit, j'ai trouvé un bug supplémentaire qui empêchait de changer la taille, un ReleaseCapture qui n'aime pas être appelé plusieurs fois de suite me semble-t-il.
C'est fou, plus je progresse en programmation windows, plus je comprends la difficulté de faire un code propre, stable et qui ne bug pas trop! Il y a sans cesse des milliards de détails qui peuvent, au choix, aider ou poser problème. Sans parler de trucs difficiles à connaître car peu documenté. Par exemple, je viens de découvrir OnSizeParent (WM_SIZEPARENT) qui peut s'avérer très pratique pour ce que j'ai à faire.
Merci pour ta réponse.
Arnold McDonald (AMcD) a écrit :
GetClientRect() attend comme apramètre un LPRECT, pas un CRect.
Quand tu fais un CRect x(a,b,c,d); le constructeur initialise les membres de x, pas quand tu fais CRect x; tout court. Dans ton second cas RectUtile possède des membre initialisés. Dans ton premier cas non.
Plus l'erreur de type.
Ah?
Je pensais que les mfc se démmerdaient avec tout ça, et vu que j'ai
repris en partie un exemple vu sur un autre forum.
Je vais tester pour voir.
Ceci dit, j'ai trouvé un bug supplémentaire qui empêchait de changer la
taille, un ReleaseCapture qui n'aime pas être appelé plusieurs fois de
suite me semble-t-il.
C'est fou, plus je progresse en programmation windows, plus je comprends
la difficulté de faire un code propre, stable et qui ne bug pas trop!
Il y a sans cesse des milliards de détails qui peuvent, au choix, aider
ou poser problème.
Sans parler de trucs difficiles à connaître car peu documenté.
Par exemple, je viens de découvrir OnSizeParent (WM_SIZEPARENT) qui peut
s'avérer très pratique pour ce que j'ai à faire.
Merci pour ta réponse.
Arnold McDonald (AMcD) a écrit :
GetClientRect() attend comme apramètre un LPRECT, pas un CRect.
Quand tu fais un CRect x(a,b,c,d); le constructeur initialise les membres de
x, pas quand tu fais CRect x; tout court. Dans ton second cas RectUtile
possède des membre initialisés. Dans ton premier cas non.
Ah? Je pensais que les mfc se démmerdaient avec tout ça, et vu que j'ai repris en partie un exemple vu sur un autre forum. Je vais tester pour voir.
Ceci dit, j'ai trouvé un bug supplémentaire qui empêchait de changer la taille, un ReleaseCapture qui n'aime pas être appelé plusieurs fois de suite me semble-t-il.
C'est fou, plus je progresse en programmation windows, plus je comprends la difficulté de faire un code propre, stable et qui ne bug pas trop! Il y a sans cesse des milliards de détails qui peuvent, au choix, aider ou poser problème. Sans parler de trucs difficiles à connaître car peu documenté. Par exemple, je viens de découvrir OnSizeParent (WM_SIZEPARENT) qui peut s'avérer très pratique pour ce que j'ai à faire.
Merci pour ta réponse.
Arnold McDonald (AMcD) a écrit :
GetClientRect() attend comme apramètre un LPRECT, pas un CRect.
Quand tu fais un CRect x(a,b,c,d); le constructeur initialise les membres de x, pas quand tu fais CRect x; tout court. Dans ton second cas RectUtile possède des membre initialisés. Dans ton premier cas non.
Plus l'erreur de type.
Arnold McDonald \(AMcD\)
JM wrote:
C'est fou, plus je progresse en programmation windows, plus je comprends la difficulté de faire un code propre, stable et qui ne bug pas trop!
!!! Heu, tes problèmes n'ont rien à voir avec la "programmation Windows". Plutôt avec des lacunes en programmation tout court. Ne pas employer les bons types, les bons paramètres, ne pas avoir visiblement bien assimilé les constructeurs, etc., c'est de la programmation, tout simplement. Si tu programmes mal, Windows n'y est pour rien :-).
-- Arnold McDonald (AMcD)
http://arnold.mcdonald.free.fr/
JM wrote:
C'est fou, plus je progresse en programmation windows, plus je
comprends la difficulté de faire un code propre, stable et qui ne bug
pas trop!
!!! Heu, tes problèmes n'ont rien à voir avec la "programmation Windows".
Plutôt avec des lacunes en programmation tout court. Ne pas employer les
bons types, les bons paramètres, ne pas avoir visiblement bien assimilé les
constructeurs, etc., c'est de la programmation, tout simplement. Si tu
programmes mal, Windows n'y est pour rien :-).
C'est fou, plus je progresse en programmation windows, plus je comprends la difficulté de faire un code propre, stable et qui ne bug pas trop!
!!! Heu, tes problèmes n'ont rien à voir avec la "programmation Windows". Plutôt avec des lacunes en programmation tout court. Ne pas employer les bons types, les bons paramètres, ne pas avoir visiblement bien assimilé les constructeurs, etc., c'est de la programmation, tout simplement. Si tu programmes mal, Windows n'y est pour rien :-).
-- Arnold McDonald (AMcD)
http://arnold.mcdonald.free.fr/
JM
Arnold McDonald (AMcD) a écrit :
!!! Heu, tes problèmes n'ont rien à voir avec la "programmation Windows". Plutôt avec des lacunes en programmation tout court. Ne pas employer les bons types, les bons paramètres, ne pas avoir visiblement bien assimilé les constructeurs, etc., c'est de la programmation, tout simplement. Si tu programmes mal, Windows n'y est pour rien :-).
Euuuhh quand je lis dans la msdn à propos de GetClientRect :
Parameters lpRect Points to a RECT structure *or* a CRect object to receive the client coordinates. The left and top members will be 0. The right and bottom members will contain the width and height of the window.
J'y peux rien moi!
Et puis savoir que faire deux releasecapture de suite ça fout son bazard, bah ce n'est pas écrit dans la msdn et c'est un peu con!
Non mais! :o)
Arnold McDonald (AMcD) a écrit :
!!! Heu, tes problèmes n'ont rien à voir avec la "programmation Windows".
Plutôt avec des lacunes en programmation tout court. Ne pas employer les
bons types, les bons paramètres, ne pas avoir visiblement bien assimilé les
constructeurs, etc., c'est de la programmation, tout simplement. Si tu
programmes mal, Windows n'y est pour rien :-).
Euuuhh quand je lis dans la msdn à propos de GetClientRect :
Parameters
lpRect
Points to a RECT structure *or* a CRect object to receive the client
coordinates. The left and top members will be 0. The right and bottom
members will contain the width and height of the window.
J'y peux rien moi!
Et puis savoir que faire deux releasecapture de suite ça fout son
bazard, bah ce n'est pas écrit dans la msdn et c'est un peu con!
!!! Heu, tes problèmes n'ont rien à voir avec la "programmation Windows". Plutôt avec des lacunes en programmation tout court. Ne pas employer les bons types, les bons paramètres, ne pas avoir visiblement bien assimilé les constructeurs, etc., c'est de la programmation, tout simplement. Si tu programmes mal, Windows n'y est pour rien :-).
Euuuhh quand je lis dans la msdn à propos de GetClientRect :
Parameters lpRect Points to a RECT structure *or* a CRect object to receive the client coordinates. The left and top members will be 0. The right and bottom members will contain the width and height of the window.
J'y peux rien moi!
Et puis savoir que faire deux releasecapture de suite ça fout son bazard, bah ce n'est pas écrit dans la msdn et c'est un peu con!
Non mais! :o)
Dominique Vaufreydaz
Bonjour,
Parameters lpRect Points to a RECT structure *or* a CRect object to receive the client coordinates. The left and top members will be 0. The right and bottom members will contain the width and height of the window. J'y peux rien moi!
C'est pas faux. Mais il ne faut pas tenir compte du type de OnSise ?
Et puis savoir que faire deux releasecapture de suite ça fout son bazard, bah ce n'est pas écrit dans la msdn et c'est un peu con!
Ouai, mais ca y'en a plein mon amis. Faire 2 "releases" de semaphore, ca fout aussi le bronx, et c'est pas non plus ecrit dans la doc.
En general, ce genre de choses la vont pas pair. Si on acquiere qqchose, on le relache...
Doms.
Bonjour,
Parameters
lpRect
Points to a RECT structure *or* a CRect object to receive the client
coordinates. The left and top members will be 0. The right and bottom
members will contain the width and height of the window.
J'y peux rien moi!
C'est pas faux. Mais il ne faut pas tenir compte du type de OnSise ?
Et puis savoir que faire deux releasecapture de suite ça fout son
bazard, bah ce n'est pas écrit dans la msdn et c'est un peu con!
Ouai, mais ca y'en a plein mon amis. Faire 2 "releases" de semaphore,
ca fout aussi le bronx, et c'est pas non plus ecrit dans la doc.
En general, ce genre de choses la vont pas pair. Si on acquiere
qqchose, on le relache...
Parameters lpRect Points to a RECT structure *or* a CRect object to receive the client coordinates. The left and top members will be 0. The right and bottom members will contain the width and height of the window. J'y peux rien moi!
C'est pas faux. Mais il ne faut pas tenir compte du type de OnSise ?
Et puis savoir que faire deux releasecapture de suite ça fout son bazard, bah ce n'est pas écrit dans la msdn et c'est un peu con!
Ouai, mais ca y'en a plein mon amis. Faire 2 "releases" de semaphore, ca fout aussi le bronx, et c'est pas non plus ecrit dans la doc.
En general, ce genre de choses la vont pas pair. Si on acquiere qqchose, on le relache...
Doms.
JM
Dominique Vaufreydaz a écrit :
En general, ce genre de choses la vont pas pair. Si on acquiere qqchose, on le relache...
Oui, mais je pensais que pour ce genre de truc, ils avaient pensé mettre un test pour savoir si la fenêtre avait bien la capture avant de faire un release. Ca prend une ligne de code.
Mais bon, maintenant je le sais, ça pourra toujours me donner des indications pour la suite.
Dominique Vaufreydaz a écrit :
En general, ce genre de choses la vont pas pair. Si on acquiere
qqchose, on le relache...
Oui, mais je pensais que pour ce genre de truc, ils avaient pensé mettre
un test pour savoir si la fenêtre avait bien la capture avant de faire
un release.
Ca prend une ligne de code.
Mais bon, maintenant je le sais, ça pourra toujours me donner des
indications pour la suite.
En general, ce genre de choses la vont pas pair. Si on acquiere qqchose, on le relache...
Oui, mais je pensais que pour ce genre de truc, ils avaient pensé mettre un test pour savoir si la fenêtre avait bien la capture avant de faire un release. Ca prend une ligne de code.
Mais bon, maintenant je le sais, ça pourra toujours me donner des indications pour la suite.
Arnold McDonald \(AMcD\)
JM wrote:
Euuuhh quand je lis dans la msdn à propos de GetClientRect :
Parameters lpRect Points to a RECT structure *or* a CRect object to receive the client coordinates. The left and top members will be 0. The right and bottom members will contain the width and height of the window.
J'y peux rien moi!
Je ne suis absolument pas spécialiste des MFCs, je t'accorde qu'il est possible qu'il y ait des erreurs de-ci, de-là dans la doc, je n'en sais rien. J'ai regardé la doc et, comme moi je lis rarement le texte explicatif (je m'arrête à l'en-tête de la fonction dans la majorité des cas), j'ai répondu qu'un problème de type devait être la cause.
Allez, jour à marquer d'une pierre blanche, je me lance (temporairement, pour t'aider) dans les MFCs ! Qu'est-ce que j'aurai pas fait sur ce forum quand même...
Voici un code MFC minimal qui utilise tes fonctions :
#define _AFXDLL #include <afxwin.h>
class CMyApp : public CWinApp { public: virtual BOOL InitInstance(); };
class CMainWindow : public CFrameWnd { public: CMainWindow(); protected: afx_msg void OnSize(UINT nType, int cx, int cy); DECLARE_MESSAGE_MAP() };
Effectivement, on peut surcharger le GetClientRect avec du CRect. Du LPRECT marche aussi. Donc, ce n'est sans doute pas l'origine de ton problème.
Comme tu peux le voir si tu essayes le code ci-dessus, les données retournées par le GetClientRect() sont correctes et s'affichent bien dans la fenêtre (pour les voir changer, redimensionne la fenêtre).
Il te faudrait donc te poser les questions suivantes :
- Fais-tu le GetClientRect() au bon endroit ? Dans la bonne classe ? - Quelles coordonnées te sont retournées ? Sont-elles valides ?
Paske, note-bien que, dans ton code, dès lors que tu forces des coordonnées valides, tu dis que ça fonctionne...
Ouf, fin de mon incursion MFC...
-- Arnold McDonald (AMcD) - Help #36/2006
http://arnold.mcdonald.free.fr/
JM wrote:
Euuuhh quand je lis dans la msdn à propos de GetClientRect :
Parameters
lpRect
Points to a RECT structure *or* a CRect object to receive the client
coordinates. The left and top members will be 0. The right and bottom
members will contain the width and height of the window.
J'y peux rien moi!
Je ne suis absolument pas spécialiste des MFCs, je t'accorde qu'il est
possible qu'il y ait des erreurs de-ci, de-là dans la doc, je n'en sais
rien. J'ai regardé la doc et, comme moi je lis rarement le texte explicatif
(je m'arrête à l'en-tête de la fonction dans la majorité des cas), j'ai
répondu qu'un problème de type devait être la cause.
Allez, jour à marquer d'une pierre blanche, je me lance (temporairement,
pour t'aider) dans les MFCs ! Qu'est-ce que j'aurai pas fait sur ce forum
quand même...
Voici un code MFC minimal qui utilise tes fonctions :
#define _AFXDLL
#include <afxwin.h>
class CMyApp : public CWinApp
{
public:
virtual BOOL InitInstance();
};
class CMainWindow : public CFrameWnd
{
public:
CMainWindow();
protected:
afx_msg void OnSize(UINT nType, int cx, int cy);
DECLARE_MESSAGE_MAP()
};
Effectivement, on peut surcharger le GetClientRect avec du CRect. Du LPRECT
marche aussi. Donc, ce n'est sans doute pas l'origine de ton problème.
Comme tu peux le voir si tu essayes le code ci-dessus, les données
retournées par le GetClientRect() sont correctes et s'affichent bien dans la
fenêtre (pour les voir changer, redimensionne la fenêtre).
Il te faudrait donc te poser les questions suivantes :
- Fais-tu le GetClientRect() au bon endroit ? Dans la bonne classe ?
- Quelles coordonnées te sont retournées ? Sont-elles valides ?
Paske, note-bien que, dans ton code, dès lors que tu forces des coordonnées
valides, tu dis que ça fonctionne...
Euuuhh quand je lis dans la msdn à propos de GetClientRect :
Parameters lpRect Points to a RECT structure *or* a CRect object to receive the client coordinates. The left and top members will be 0. The right and bottom members will contain the width and height of the window.
J'y peux rien moi!
Je ne suis absolument pas spécialiste des MFCs, je t'accorde qu'il est possible qu'il y ait des erreurs de-ci, de-là dans la doc, je n'en sais rien. J'ai regardé la doc et, comme moi je lis rarement le texte explicatif (je m'arrête à l'en-tête de la fonction dans la majorité des cas), j'ai répondu qu'un problème de type devait être la cause.
Allez, jour à marquer d'une pierre blanche, je me lance (temporairement, pour t'aider) dans les MFCs ! Qu'est-ce que j'aurai pas fait sur ce forum quand même...
Voici un code MFC minimal qui utilise tes fonctions :
#define _AFXDLL #include <afxwin.h>
class CMyApp : public CWinApp { public: virtual BOOL InitInstance(); };
class CMainWindow : public CFrameWnd { public: CMainWindow(); protected: afx_msg void OnSize(UINT nType, int cx, int cy); DECLARE_MESSAGE_MAP() };
Effectivement, on peut surcharger le GetClientRect avec du CRect. Du LPRECT marche aussi. Donc, ce n'est sans doute pas l'origine de ton problème.
Comme tu peux le voir si tu essayes le code ci-dessus, les données retournées par le GetClientRect() sont correctes et s'affichent bien dans la fenêtre (pour les voir changer, redimensionne la fenêtre).
Il te faudrait donc te poser les questions suivantes :
- Fais-tu le GetClientRect() au bon endroit ? Dans la bonne classe ? - Quelles coordonnées te sont retournées ? Sont-elles valides ?
Paske, note-bien que, dans ton code, dès lors que tu forces des coordonnées valides, tu dis que ça fonctionne...
Ouf, fin de mon incursion MFC...
-- Arnold McDonald (AMcD) - Help #36/2006
http://arnold.mcdonald.free.fr/
Dominique Vaufreydaz
Tu vas du coté Obscur de la force : MFC is the Path of the Dark Side.
MFC leads to Anger (Pas la ville, hein ???).
Anger leads to Hate,
Hate leads to Suffering.
CQFD. Doms.
Tu vas du coté Obscur de la force :
MFC is the Path of the Dark Side.
Tu vas du coté Obscur de la force : MFC is the Path of the Dark Side.
MFC leads to Anger (Pas la ville, hein ???).
Anger leads to Hate,
Hate leads to Suffering.
CQFD. Doms.
Arnold McDonald \(AMcD\)
MDR.
Tu noteras que, même en MFC, je reste AMcD ! Un seul fichier, pas d'assistants, pas 50 dossiers, aucun include, etc. Compare avec un projet MFC généré par Visual Studio...
Merci à Prosize et Kruglinski au passage :-).
PS : pour ceux qui veulent exécuter le code du post ci-dessus, creér un projet Win32 (vivi !) et ne pas oublier dans ses options pour le linker de spécifier /ENTRY:"wWinMainCRTStartup" dans la ligne de commande...
-- Arnold McDonald (AMcD)
http://arnold.mcdonald.free.fr/
MDR.
Tu noteras que, même en MFC, je reste AMcD ! Un seul fichier, pas
d'assistants, pas 50 dossiers, aucun include, etc. Compare avec un projet
MFC généré par Visual Studio...
Merci à Prosize et Kruglinski au passage :-).
PS : pour ceux qui veulent exécuter le code du post ci-dessus, creér un
projet Win32 (vivi !) et ne pas oublier dans ses options pour le linker de
spécifier /ENTRY:"wWinMainCRTStartup" dans la ligne de commande...
Tu noteras que, même en MFC, je reste AMcD ! Un seul fichier, pas d'assistants, pas 50 dossiers, aucun include, etc. Compare avec un projet MFC généré par Visual Studio...
Merci à Prosize et Kruglinski au passage :-).
PS : pour ceux qui veulent exécuter le code du post ci-dessus, creér un projet Win32 (vivi !) et ne pas oublier dans ses options pour le linker de spécifier /ENTRY:"wWinMainCRTStartup" dans la ligne de commande...
-- Arnold McDonald (AMcD)
http://arnold.mcdonald.free.fr/
Dominique Vaufreydaz
Bonjour,
Tu noteras que, même en MFC, je reste AMcD ! Un seul fichier, pas d'assistants, pas 50 dossiers, aucun include, etc. Compare avec un projet MFC généré par Visual Studio...
On commence comme ca... Après on se dit que l'assistant, finalement, il pourrait bien le faire ;-P
Merci à Prosize et Kruglinski au passage :-).
Ouai ! ;-P
Doms.
Bonjour,
Tu noteras que, même en MFC, je reste AMcD ! Un seul fichier, pas
d'assistants, pas 50 dossiers, aucun include, etc. Compare avec un
projet MFC généré par Visual Studio...
On commence comme ca... Après on se dit que l'assistant, finalement,
il pourrait bien le faire ;-P
Tu noteras que, même en MFC, je reste AMcD ! Un seul fichier, pas d'assistants, pas 50 dossiers, aucun include, etc. Compare avec un projet MFC généré par Visual Studio...
On commence comme ca... Après on se dit que l'assistant, finalement, il pourrait bien le faire ;-P