Problème fenêtre cliente

raoulman Messages postés 40 Date d'inscription vendredi 14 mars 2003 Statut Membre Dernière intervention 21 avril 2007 - 9 déc. 2004 à 03:33
raoulman Messages postés 40 Date d'inscription vendredi 14 mars 2003 Statut Membre Dernière intervention 21 avril 2007 - 9 déc. 2004 à 15:50
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

cs_AlexMAN Messages postés 1536 Date d'inscription samedi 21 décembre 2002 Statut Membre Dernière intervention 24 mai 2009 1
9 déc. 2004 à 06:35
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)
0
ymca2003 Messages postés 2070 Date d'inscription mardi 22 avril 2003 Statut Membre Dernière intervention 3 juillet 2006 7
9 déc. 2004 à 08:52
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é).
0
raoulman Messages postés 40 Date d'inscription vendredi 14 mars 2003 Statut Membre Dernière intervention 21 avril 2007 1
9 déc. 2004 à 15:50
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
0
Rejoignez-nous