Bonjour, comme le dit le titre, j'aimerais écrire dans une fenêtre à partir d'une fonction, c'est à dire, sans passer par WM_PAINT. Est-ce possible?
Si quelqu'un a une solution quelconque, n'hésitez pas!
Merci.
Bonjour, comme le dit le titre, j'aimerais écrire dans une fenêtre à partir d'une fonction, c'est à dire, sans passer par WM_PAINT. Est-ce possible?
Si quelqu'un a une solution quelconque, n'hésitez pas!
Merci.
Bonjour,
La possibilité, oui, surement, mais il faudra expliquer plus en détail ce que vous souhaitez faire afin d'avoir une réponse précise.
Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi
Ma page sur DVP
Mon Portfolio
Qui connaît l'erreur, connaît la solution.
Bonjour, en fait, je veut marquer "Nombre de résultats : " suivi de la variable(un entier) "leNombre" dans ma fenêtre. Ce code doit ce trouver dans une fonction, et donc, pas dans WM_PAINT. J'ai essayé d'utiliser :
Mais la phrase ne s'affiche pas, et leNombre est un entier alors que TextOut() demande un const char*(ne vous en faites pas, je sais comment résoudre ce problème).
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 HDC hDC; HWND hWnd; hDC = GetWindowDC(hWnd); PAINTSTRUCT Ps; hDC=BeginPaint(hWnd,&Ps); TextOut (hDC, 255, 255,"Nombre de résultats : ", strlen("Nombre de résultats : ")); TextOut (hDC, 255, 255,leNombre, strlen(leNombre)); EndPaint(hWnd, &Ps);
Je doit mettre le code dans une fonction, car leNombre est initialisé dans cette fonction.
Je ne sais pas si ça peut marcher, mais en tout cas, il faut que tu dises à Windows que ta fenêtre doit être redessinée.
C'est possible avec la fonction Invalidate, ou plus violent UpdateWindow
Si vous ne trouvez plus rien, cherchez autre chose...
Vous trouverez ici des tutoriels OpenGL moderne.
Mon moteur 3D: Castor 3D, presque utilisable (venez participer, il y a de la place)!
Un projet qui ne sert à rien, mais qu'il est joli (des fois) : ProceduralGenerator (Génération procédurale d'images, et post-processing).
Comment marche ces fonctions s'il te plait? Je ne suis pas très fort.
MSDN : UpdateWindow
Si vous ne trouvez plus rien, cherchez autre chose...
Vous trouverez ici des tutoriels OpenGL moderne.
Mon moteur 3D: Castor 3D, presque utilisable (venez participer, il y a de la place)!
Un projet qui ne sert à rien, mais qu'il est joli (des fois) : ProceduralGenerator (Génération procédurale d'images, et post-processing).
Merci pour cette réponse, mais il n'y a quand-même rien qui s'affiche avec UpdateWindow() et avec Invalidate() !![]()
As-tu essayé avec un ClientDC plutôt qu'avec un PaintDC (ce que tu fais actuellement) ? (regarde la doc MSDN pour les questions que tu te poses déjà sur ClientDC)
Si vous ne trouvez plus rien, cherchez autre chose...
Vous trouverez ici des tutoriels OpenGL moderne.
Mon moteur 3D: Castor 3D, presque utilisable (venez participer, il y a de la place)!
Un projet qui ne sert à rien, mais qu'il est joli (des fois) : ProceduralGenerator (Génération procédurale d'images, et post-processing).
Ce que tu dois faire pour tricher ainsi, c'est invalider la zone où tu veux écrire avant de faire ton écriture forcée.
Sinon, tu gardes ton code d'écriture dans le traitement du WM_PAINT, et tu l'invoques avec un InvalidateRect()+UpdateWindow() (ou un RedrawWindow() avec les bons paramètres, ça devrait faire la même chose).
Edit: RedrawWindow avec les bons paramètres, ça doit ressembler à ceci si tu veux redessiner toute la fenêtre:
Code C : Sélectionner tout - Visualiser dans une fenêtre à part RedrawWindow(hWnd, NULL, NULL, RDW_INVALIDATE|RDW_UPDATENOW);
SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.
"Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
Apparently everyone. -- Raymond Chen.
Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.
Ces deux fonctions forcent l'envoi d'un message WM_PAINT - rien d'autre.
Quelle est la valeur de ton hwnd ? Parce faire un GetWindowDC(hwnd) c'est bien sympa, mais il faut que le hwnd soit valide - sinon le HDC obtenu est NULL.
Il y a aussi le fait que BeginPaint() ne peut être appelé qu'en réponse à un message WM_PAINT (lire : si tu l'appelle en dehors du handler de WM_PAINT, ça ne marchera pas ; cf. http://msdn.microsoft.com/en-us/libr...v=vs.85).aspx). En dehors de WM_PAINT, tu n'a pas besoin de faire un BeginPaint(), tu peux directement dessiner sur le HDC dès lors que celui-ci est valide.
Accessoirement, tester les codes de retour des fonctions permet de mieux comprendre les erreurs de logique de son propre code. Je te conseille de le faire.
Et pour créer une chaîne qui va contenir tout ce que tu souhaite afficher, utilise std::stringstream (http://www.cplusplus.com/reference/s.../stringstream/) (oui, je sais, tu as une méthode pour parvenir à tes fins ; ce qui reviens probablement à refaire une conversion int -> chaine ; ce qui est déjà fait par std::stringstream).
[FAQ des forums][FAQ Développement 2D, 3D et Jeux][Si vous ne savez pas ou vous en êtes...]
Essayez d'écrire clairement (c'est à dire avec des mots français complets). SMS est votre ennemi.
Evitez les arguments inutiles - DirectMachin vs. OpenTruc ou G++ vs. Café. C'est dépassé tout ça.
Et si vous êtes sages, vous aurez peut être vous aussi la chance de passer à la télé. Ou pas.
Ce site contient un forum d'entraide gratuit. Il ne s'use que si l'on ne s'en sert pas.
Ça dépend, c'est la HWND de quoi que tu cherches? Celui de ta propre fenêtre? Celui d'un des contrôles dans la fenêtre? etc.
SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.
"Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
Apparently everyone. -- Raymond Chen.
Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.
Ben tu l'as déjà... Il est retourné par CreateWindow() et reçu en paramètre de ta WNDPROC...
SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.
"Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
Apparently everyone. -- Raymond Chen.
Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.
D'accord, merci.
Quelle est donc l'instruction pour dessiner sur le HDC?En dehors de WM_PAINT, tu n'a pas besoin de faire un BeginPaint(), tu peux directement dessiner sur le HDC dès lors que celui-ci est valide.
Euh... TextOut(), ... Toutes les fonctions qui prennent un HDC en paramètre et qui, d'après leur nom, dessine quelque chose. Le dessin, sous Windows, c'est assez large...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 bool ma_fonction_de_dessin(HWND hwnd) { HDC hdc = GetDC(hwnd); if (!hdc) return false; // toute fonction de dessin utile... // OBLIGATOIRE : faire un release du HDC, parce que sans ça, quelqu'un va crier fort. ReleaseDC(hwnd, hdc); return true; }
[FAQ des forums][FAQ Développement 2D, 3D et Jeux][Si vous ne savez pas ou vous en êtes...]
Essayez d'écrire clairement (c'est à dire avec des mots français complets). SMS est votre ennemi.
Evitez les arguments inutiles - DirectMachin vs. OpenTruc ou G++ vs. Café. C'est dépassé tout ça.
Et si vous êtes sages, vous aurez peut être vous aussi la chance de passer à la télé. Ou pas.
Ce site contient un forum d'entraide gratuit. Il ne s'use que si l'on ne s'en sert pas.
Partager