Problème fenêtre cliente

Signaler
Messages postés
40
Date d'inscription
vendredi 14 mars 2003
Statut
Membre
Dernière intervention
21 avril 2007
-
Messages postés
40
Date d'inscription
vendredi 14 mars 2003
Statut
Membre
Dernière intervention
21 avril 2007
-
Bonjour,

J'ai un petit souci avec une fenêtre cliente et WM_PAINT, je m'explique.

Aujourd'hui, j'ai une fenêtre qui contient une fenêtre cliente dedans. Si je réduis la fenêtre mère et que je l'agrandis, je retrouve bien ma fenêtre fille.
Maintenant, si je mets un WM_PAINT, même sans code puisque je voudrais dessiner dans la fenêtre fille, que je réduis puis agrandis ma fenêtre mère, ma fenêtre fille a disparu! C'est pas sympa!

J'ai un UpdateWindow, j'ai essayé un RedrawWindow, un InvalidateRect, mais ça marche pas, sûrement que je les ai pas mis ou il fallait. Quelqu'un pourraît-il m'aider ? Voilà le code

#include <windows.h>

HWND case1;

LRESULT CALLBACK WindowProcedure (HWND, UINT, WPARAM, LPARAM);

char szClassName[ ] = "WindowsApp";
char szClassName2[ ] = "Classe_case1";

int WINAPI WinMain (HINSTANCE hThisInstance,
HINSTANCE hPrevInstance,
LPSTR lpszArgument,
int nFunsterStil)

{
HWND hwnd;
MSG messages;
WNDCLASSEX wincl;
WNDCLASSEX classe_case1;

wincl.hInstance = hThisInstance;
wincl.lpszClassName = szClassName;
wincl.lpfnWndProc = WindowProcedure;
wincl.style = CS_DBLCLKS;
wincl.cbSize = sizeof (WNDCLASSEX);

wincl.hIcon = LoadIcon (NULL, IDI_APPLICATION);
wincl.hIconSm = LoadIcon (NULL, IDI_APPLICATION);
wincl.hCursor = LoadCursor (NULL, IDC_ARROW);
wincl.lpszMenuName = NULL;
wincl.cbClsExtra = 0;
wincl.cbWndExtra = 0;
wincl.hbrBackground = (HBRUSH) COLOR_BACKGROUND;

/* classe_case1 */

classe_case1.hInstance = hThisInstance;
classe_case1.lpszClassName = szClassName2;
classe_case1.lpfnWndProc = WindowProcedure;
classe_case1.style = CS_DBLCLKS;
classe_case1.cbSize = sizeof (WNDCLASSEX);

classe_case1.hIcon = LoadIcon (NULL, IDI_APPLICATION);
classe_case1.hIconSm = LoadIcon (NULL, IDI_APPLICATION);
classe_case1.hCursor = LoadCursor (NULL, IDC_ARROW);
classe_case1.lpszMenuName = NULL;
classe_case1.cbClsExtra = 0;
classe_case1.cbWndExtra = 0;
classe_case1.hbrBackground = (HBRUSH) GetStockObject (WHITE_BRUSH);

if (!RegisterClassEx (&wincl) || !RegisterClassEx (&classe_case1))
return 0;

hwnd = CreateWindowEx (0, szClassName, "test", WS_SYSMENU | WS_MINIMIZEBOX, 250, 150, 240, 260, HWND_DESKTOP, NULL, hThisInstance, NULL);

case1 = CreateWindowEx (WS_EX_CLIENTEDGE, zClassName2, NULL, WS_VISIBLE|WS_CHILD, 10, 10, 70, 70, hwnd, NULL, hThisInstance, NULL);

ShowWindow (hwnd, nFunsterStil);

UpdateWindow (hwnd);

while (GetMessage (&messages, NULL, 0, 0))
{
TranslateMessage(&messages);
DispatchMessage(&messages);
}

return messages.wParam;
}

LRESULT CALLBACK WindowProcedure (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{

switch (message)
{

case WM_DESTROY:

PostQuitMessage (0);

break;

case WM_CREATE :
break;

case WM_PAINT :
break;

default:
return DefWindowProc (hwnd, message, wParam, lParam);
}

return 0;
}

3 réponses

Messages postés
1536
Date d'inscription
samedi 21 décembre 2002
Statut
Membre
Dernière intervention
24 mai 2009
2
Crée ta fenetre fille avec le style WS_EX_TOPMOST, et elle sera tjrs devant ta fenetre parent, comme ca, pas de pb ;)

++

+2(p - n)
Messages postés
2070
Date d'inscription
mardi 22 avril 2003
Statut
Membre
Dernière intervention
3 juillet 2006
8
Déjà évite de mettre la même WndProc pour la fenêtre mère et la fenêtre fille (cela t'évitera des problèmes inutiles). Ensuite, si tu traite le message WM_PAINT, il faut soit appeler ValidateRect soit faire BeginPainet et EndPaint dans le case WM_PAINT (sinon le message sera constament envoyé).
Messages postés
40
Date d'inscription
vendredi 14 mars 2003
Statut
Membre
Dernière intervention
21 avril 2007
1
WS_EX_TOPMOST ne fonctionne pas, ma fenêtre fille disparaît toujours.

Merci ymca2003, t'as trouvé mon problème! J'ai suivi ton conseil et j'ai crée une WndProc pour ma fenêtre fille, maintenant, je n'ai plus de problèmes lors de la réduction / agrandissement ou superpositions de fenêtres.

Pour BegainPaint et EndPaint, je les avais enlevés pour essayer de trouver ce qui empêchait l'affichage de la fenêtre cliente

Merci à tous les deux