Refresh Fenetre Api Windows

[Résolu]
Signaler
Messages postés
755
Date d'inscription
samedi 15 mai 2004
Statut
Membre
Dernière intervention
30 janvier 2011
-
Messages postés
755
Date d'inscription
samedi 15 mai 2004
Statut
Membre
Dernière intervention
30 janvier 2011
-
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

Messages postés
6535
Date d'inscription
lundi 16 décembre 2002
Statut
Modérateur
Dernière intervention
22 août 2010
9
Il ne faut pas utiliser Sleep (qui bloque le thread, donc la boucle de messages), mais un Timer (SetTimer, KillTimer)
Messages postés
755
Date d'inscription
samedi 15 mai 2004
Statut
Membre
Dernière intervention
30 janvier 2011

pourai tu etre plus explicite rien que en me disant ou je place le timer, et si j'utilise un while ....... enfin voila merci :)
Messages postés
6535
Date d'inscription
lundi 16 décembre 2002
Statut
Modérateur
Dernière intervention
22 août 2010
9
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
Messages postés
755
Date d'inscription
samedi 15 mai 2004
Statut
Membre
Dernière intervention
30 janvier 2011

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 ?
Messages postés
755
Date d'inscription
samedi 15 mai 2004
Statut
Membre
Dernière intervention
30 janvier 2011

j'ai reussis merci !! j'ai fait un test avec une message box :)
maintenant ya plus qu'a trouver comment on recuperer la ram :)