Refresh Fenetre Api Windows

Résolu
wxccxw Messages postés 755 Date d'inscription samedi 15 mai 2004 Statut Membre Dernière intervention 30 janvier 2011 - 29 janv. 2006 à 17:43
wxccxw Messages postés 755 Date d'inscription samedi 15 mai 2004 Statut Membre Dernière intervention 30 janvier 2011 - 29 janv. 2006 à 19:13
salut :)
bon voila mon petit Probleme, je suis en train de faire une fenetre qui va afficher en temps reel la ram utilise !
donc je recupere la ram toutes les seconde et j'affiche sur la progress bar
d'abord :
min 0, max = Max de ram
et position = ram UTILISEr
etc... tout les secondes

mon probleme : Recuperer la RAM :) FIRST
et aussi, faire un refresh tout les seconde ( je rapele, je suis sur un API WINDOWS)

voici le code de ma fenetre tout simple juste progress bar et texte :)

#include <windows.h>
#include <commctrl.h>

#include <string.h>
#define ID_TEXTE 200
#define ID_TEXTE2 250
#include <stdio.h>
#pragma comment(lib,"comctl32.lib")
INITCOMMONCONTROLSEX InitCtrlEx;
LRESULT CALLBACK WindowProcedure (HWND, UINT, WPARAM, LPARAM);
#define IDC_PROGRESS 1016

char szClassName[ ] = "WindowsApp";

HWND hwnd;
HWND progress;
HWND text1;
HWND text2;


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

{

MSG messages;
WNDCLASSEX wincl;

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 = CreateSolidBrush(RGB(236,233,216));


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


hwnd = CreateWindowEx (
0,
szClassName,
"Memoire Ram",
WS_OVERLAPPED|WS_CAPTION|WS_SYSMENU|WS_MINIMIZEBOX|WS_MAXIMIZEBOX,
CW_USEDEFAULT,
CW_USEDEFAULT,
280,
180,
HWND_DESKTOP,
NULL,
hThisInstance,
NULL
);


InitCtrlEx.dwSize = sizeof(INITCOMMONCONTROLSEX);

InitCtrlEx.dwICC = ICC_PROGRESS_CLASS;
if (!InitCommonControlsEx(&InitCtrlEx))

exit(1);

ShowWindow (hwnd, nFunsterStil);
progress = CreateWindowEx(CS_DBLCLKS, PROGRESS_CLASS, NULL, WS_CHILD | WS_VISIBLE | PBS_SMOOTH, 30, 50, 200, 50, hwnd, NULL, 0, NULL);

text1 = CreateWindowEx(0,"STATIC",NULL, WS_VISIBLE|WS_CHILD , 30,30,
200,25,hwnd, (HMENU) ID_TEXTE, hThisInstance, NULL);

text2 = CreateWindowEx(0,"STATIC",NULL, WS_VISIBLE|WS_CHILD , 30,105,
200,25,hwnd, (HMENU) ID_TEXTE2, hThisInstance, NULL);

SetWindowText(text1,"Utilisation de la memoire RAM");
SetWindowText(text2,"128/200");

UpdateWindow(text1);
UpdateWindow(text2);
UpdateWindow(hwnd);
UpdateWindow(progress);

SendMessage(progress,PBM_SETRANGE,0,MAKELPARAM(0,100));
SendMessage(progress,PBM_SETPOS,(WPARAM)90,0);



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;
default:
return DefWindowProc (hwnd, message, wParam, lParam);



case WM_COMMAND :

break;
}

return 0;
}

donc j'ai essayer avec un sleep mais sa me met
"CE PROGRAMME NE REPONDS PLUS" car les messages non pas le temps d'etre tranmis :)
et donc toutes les secondes :

SendMessage(progress,PBM_SETRANGE,0,MAKELPARAM(0, MAX RAM ));

SendMessage(progress,PBM_SETPOS,(WPARAM) RAM UTILISE ,0);

et aussi, SetWindowText(texte2,"RAM UTILISER / MAX RAM");

Alors Comment faire ?

5 réponses

vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
29 janv. 2006 à 17:49
Il ne faut pas utiliser Sleep (qui bloque le thread, donc la boucle de messages), mais un Timer (SetTimer, KillTimer)
3
wxccxw Messages postés 755 Date d'inscription samedi 15 mai 2004 Statut Membre Dernière intervention 30 janvier 2011
29 janv. 2006 à 17:55
pourai tu etre plus explicite rien que en me disant ou je place le timer, et si j'utilise un while ....... enfin voila merci :)
3
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
29 janv. 2006 à 18:22
A la création de la fenêtre (dans le WM_CREATE), tu fais un SetTimer. Comme ca, tu recevra un message WM_TIMER toutes les secondes
3
wxccxw Messages postés 755 Date d'inscription samedi 15 mai 2004 Statut Membre Dernière intervention 30 janvier 2011
29 janv. 2006 à 19:02
Donc Enfaite, il suffit que je fasse un timmer et quand j'ai le message WM_TIMER je fais le code a effectuer :)
c'est sa ?
3

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
wxccxw Messages postés 755 Date d'inscription samedi 15 mai 2004 Statut Membre Dernière intervention 30 janvier 2011
29 janv. 2006 à 19:13
j'ai reussis merci !! j'ai fait un test avec une message box :)
maintenant ya plus qu'a trouver comment on recuperer la ram :)
3
Rejoignez-nous