|
Trouver une ressource
Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !
[WIN32][C][DEV-C++] GRAPH TRANSPARENT DEBIT RESEAU
Information sur la source
Description
Voila une petite source qui affiche un graphique transparent du débit réseau (moyenne sur 1/2 minute) Objectifs: ---------- * modification du curseur * déplacement d'une fenêtre par la souris * dessin de graphiques * récupération des octets téléchargés et envoyés * transparence de fenêtre click gauche = déplacement click droit = quitter Attention modifier "ncard" pour spécifier votre carte réseau si ce n'est pas la 1ère comme d'habitude modifier renommer le fichier ".ex" en ".exe", attention j'ai sélectionné un débit de 800ko/128ko et la première carte réseau pour une utilisation autre il faudra modifier ces variables. enjoy ;)
Source
- //------------------------------------------------------------------------------
- // Projet Graph : mesure du débit entrant/sortant (moyennes)
- // Auteur : Hanteville Nicolas
- // Fichier : proc.c
- // Version : 0.1
- // Date de modification : 20/04/2008
- // Description : code pour exemple
- // Environnement : compatibilité DEVCPP / VISUAL C++ / BORLAND C++ 5.x
- //------------------------------------------------------------------------------
- /*
- Objectifs:
- ----------
- * modification du curseur
- * déplacement d'une fenêtre par la souris
- * dessin de graphiques
- * récupération des octets téléchargés et envoyés
- * transparence de fenêtre
-
-
- click gauche = déplacement
- click droit = quitter
-
- Attention modifier "ncard" pour spécifier votre carte réseau si ce n'est pas la 1ère
-
-
- */
- //------------------------------------------------------------------------------
- #define _WIN32_WINNT 0x0500
- #include <windows.h>
- #include <iphlpapi.h> //-liphlpapi
-
- #pragma comment(lib, "iphlpapi.lib")
- //------------------------------------------------------------------------------
-
- //débit réseau en ko entrant/sortant
- #define debit_dw 800 // ko
- #define debit_up 128 // ko
-
- //tailles de graph + fenêtre
- #define x_refresh 0
- #define y_refresh 0
- #define xx_refresh 264
- #define yy_refresh 95
-
- #define x_cadre_i 150
- #define y_cadre_m 46
-
- //bordure entre les cadres + espacement internes
- #define border 5
- #define espace 3
-
- //sélection de la carte réseau
- #define ncard 0
-
- //nombre de valeurs /graphiques
- #define NB_Item 28
-
- #define szClassName "WindowsApp"
-
-
- BOOL start;
- RECT rect;
- float items[NB_Item];
- float itemo[NB_Item];
- HWND hwnd;
-
- //------------------------------------------------------------------------------
- //timer de mise à jour du schéma + down + upload
- DWORD WINAPI timer(LPVOID lParam)
- {
- unsigned short i;
- PMIB_IFTABLE buffer;
- ULONG size=0;
-
- //instance pour récupération de la structure
- GetIfTable (NULL, &size, TRUE);
- buffer = (PMIB_IFTABLE)GlobalAlloc(GMEM_FIXED, size);
-
- //lecture actuel + init des valeurs
- GetIfTable(buffer, &size, FALSE);
- int in = buffer->table[ncard].dwInOctets;
- int out = buffer->table[ncard].dwOutOctets;
-
- //tant que l'on ne quitte pas on continue
- while(start)
- {
- _sleep(1000);//toutes les secondes maj
-
- //rotation des valeurs
- for (i=0;i<NB_Item-1;i++)
- {
- items[i]=items[i+1];
- itemo[i]=itemo[i+1];
- }
-
- //maj des valeurs
- GetIfTable(buffer, &size, FALSE);
-
- //copie du débit en ko
- items[NB_Item-1]=(buffer->table[ncard].dwInOctets-in)/1024;
- itemo[NB_Item-1]=(buffer->table[ncard].dwOutOctets-out)/1024;
-
- //totaux
- in = buffer->table[ncard].dwInOctets;
- out = buffer->table[ncard].dwOutOctets;
-
- //emplacement de refresh de la forme
- /*rect.left = x_refresh;
- rect.top = y_refresh;
- rect.right = xx_refresh;
- rect.bottom = yy_refresh;*/
-
- //toute le forme ici
- InvalidateRect(hwnd,0/*&rect*/,FALSE);
- UpdateWindow(hwnd);
- }
- GlobalFree(buffer);
- }
-
- //------------------------------------------------------------------------------
- /* This function is called by the Windows function DispatchMessage() */
-
- POINT pt;
- int mouseX,mouseY;
- BOOL bCapture;
-
- LRESULT CALLBACK WindowProcedure (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
- {
- switch (message)
- {
- //gestion du déplacement de la fenêtre
- case WM_LBUTTONDOWN:
- mouseX = LOWORD(lParam);
- mouseY = HIWORD(lParam);
- SetCapture(hwnd);
- bCapture = 1;
- return 0;
- break;
- case WM_LBUTTONUP:
- if(GetCapture() == hwnd)
- {
- ReleaseCapture();
- bCapture = 0;
- GetCursorPos(&pt);
- SetWindowPos(hwnd, 0, pt.x - mouseX, pt.y - mouseY, 0, 0, SWP_NOZORDER | SWP_NOSIZE);
- }
- break;
- case WM_MOUSEMOVE:
- if(bCapture)
- {
- pt.x = LOWORD(lParam);
- pt.y = HIWORD(lParam);
- ClientToScreen(hwnd, &pt);
- SetCursor( LoadCursor( NULL , IDC_SIZEALL ));//icone de déplacement
- SetWindowPos(hwnd, 0, pt.x - mouseX, pt.y - mouseY, 0, 0, SWP_NOZORDER | SWP_NOSIZE);
- }
- break;
- //----
-
- //on quit par un click droit
- case WM_RBUTTONDOWN:
- start=0;
- PostQuitMessage (0);
- break;
-
- //dessin du graphique + fenêtre
- case WM_PAINT:
- {
- PAINTSTRUCT ps;
- HDC hdc=BeginPaint(hwnd,&ps);
-
- HBRUSH Hb1 = CreateSolidBrush(RGB(0, 150, 0)); //vert
- HBRUSH Hb2 = CreateSolidBrush(RGB(150, 0, 0)); //rouge
- int a;
- unsigned int taillephrag,nbnb;
- unsigned short val,val2;
- float moy=0,moyout=0;
-
- //rect de contour global
- Rectangle(hdc,0,0,xx_refresh,yy_refresh);
- //les 2 autres rectangles
- Rectangle(hdc,border,border,x_cadre_i,y_cadre_m);
- Rectangle(hdc,border,y_cadre_m+espace,x_cadre_i,yy_refresh-border);
-
- for (a=0;a<NB_Item;a++)
- {
- moy+=items[a];
- moyout+=itemo[a];
-
- //position de la barre d'état
- val2 = 8+a*(5);
-
- //down
- val =y_cadre_m-(y_cadre_m-8)*items[a]/debit_dw;
- if (val<8)val=8;
- SelectObject(hdc,Hb1);
- Rectangle(hdc,val2,val,val2+4,y_cadre_m);
-
- //up
- val =yy_refresh-border-(y_cadre_m-8)*itemo[a]/debit_up;
- if (val<52)val=52;
- SelectObject(hdc,Hb2);
- Rectangle(hdc,val2,val,val2+4,yy_refresh-5);
- }
-
- moy = moy/NB_Item;
- moyout= moyout/NB_Item;
-
- //on ajoute les écritures max et min
- char tmpMoy[256];
-
- //min
- rect.top = yy_refresh-20;
- rect.bottom = yy_refresh-border;
- rect.left = x_cadre_i+espace;
- rect.right = xx_refresh-border;
- FillRect(hdc, &rect, GetSysColorBrush(COLOR_WINDOW));
- SetTextColor(hdc, GetSysColor(COLOR_MENUTEXT));
- //1000 car au dessus de 999.99
- if (moyout<1000)sprintf(tmpMoy,"up:%5.2fKo/s",moyout);
- else if (moyout<1024000)sprintf(tmpMoy,"up:%5.2fMo/s",moyout/1024.0);
- else sprintf(tmpMoy,"up:%5.2fGo/s",moyout/1048576.0);
- DrawText(hdc,tmpMoy,strlen(tmpMoy), &rect, DT_VCENTER);
-
- //max
- rect.top = border;
- rect.bottom = (y_cadre_m+espace)*2;
- if (moyout<1000)sprintf(tmpMoy,"dw:%5.2fKo/s",moy);
- else if (moyout<1024000)sprintf(tmpMoy,"dw:%5.2fMo/s",moy/1024.0);
- else sprintf(tmpMoy,"dw:%5.2fGo/s",moy/1048576.0);
- DrawText(hdc,tmpMoy,strlen(tmpMoy), &rect, DT_VCENTER);
-
- //libération
- DeleteObject(Hb1);
- DeleteObject(Hb2);
- EndPaint(hwnd,&ps);
- }
- break;
- case WM_DESTROY:
- start=0;
- PostQuitMessage (0);
- break;
- default:
- return DefWindowProc (hwnd, message, wParam, lParam);
- }
-
- return 0;
- }
-
- //------------------------------------------------------------------------------
- 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 = (HBRUSH) COLOR_BACKGROUND;
-
- if (!RegisterClassEx (&wincl))
- return 0;
-
- //fenêtre sans icone dans la barre des tâche
- hwnd = CreateWindowEx (WS_EX_LAYERED|WS_EX_NOACTIVATE|WS_EX_TOPMOST,szClassName,"Windows App",WS_POPUP,900,200,xx_refresh,yy_refresh,HWND_DESKTOP,NULL,hThisInstance,NULL);
-
- //on affiche la fenêtre
- ShowWindow (hwnd, 1);
-
- //définition de l'état de transparence (0-255), 255= opaque
- SetLayeredWindowAttributes(hwnd,0,150,0x02);
-
- //timer maj
- start=1;
- CreateThread(NULL,0,timer,0,0,0);
-
- //définision de la région a afficher ici non utile car = fenêtre
- //HRGN region = CreateRectRgn(x_refresh,y_refresh,xx_refresh,yy_refresh);
- //SetWindowRgn(hwnd,region,1);
-
- bCapture=0;
-
- while (GetMessage (&messages, NULL, 0, 0))
- {
- TranslateMessage(&messages);
- DispatchMessage(&messages);
- }
-
- return messages.wParam;
- }
//------------------------------------------------------------------------------
// Projet Graph : mesure du débit entrant/sortant (moyennes)
// Auteur : Hanteville Nicolas
// Fichier : proc.c
// Version : 0.1
// Date de modification : 20/04/2008
// Description : code pour exemple
// Environnement : compatibilité DEVCPP / VISUAL C++ / BORLAND C++ 5.x
//------------------------------------------------------------------------------
/*
Objectifs:
----------
* modification du curseur
* déplacement d'une fenêtre par la souris
* dessin de graphiques
* récupération des octets téléchargés et envoyés
* transparence de fenêtre
click gauche = déplacement
click droit = quitter
Attention modifier "ncard" pour spécifier votre carte réseau si ce n'est pas la 1ère
*/
//------------------------------------------------------------------------------
#define _WIN32_WINNT 0x0500
#include <windows.h>
#include <iphlpapi.h> //-liphlpapi
#pragma comment(lib, "iphlpapi.lib")
//------------------------------------------------------------------------------
//débit réseau en ko entrant/sortant
#define debit_dw 800 // ko
#define debit_up 128 // ko
//tailles de graph + fenêtre
#define x_refresh 0
#define y_refresh 0
#define xx_refresh 264
#define yy_refresh 95
#define x_cadre_i 150
#define y_cadre_m 46
//bordure entre les cadres + espacement internes
#define border 5
#define espace 3
//sélection de la carte réseau
#define ncard 0
//nombre de valeurs /graphiques
#define NB_Item 28
#define szClassName "WindowsApp"
BOOL start;
RECT rect;
float items[NB_Item];
float itemo[NB_Item];
HWND hwnd;
//------------------------------------------------------------------------------
//timer de mise à jour du schéma + down + upload
DWORD WINAPI timer(LPVOID lParam)
{
unsigned short i;
PMIB_IFTABLE buffer;
ULONG size=0;
//instance pour récupération de la structure
GetIfTable (NULL, &size, TRUE);
buffer = (PMIB_IFTABLE)GlobalAlloc(GMEM_FIXED, size);
//lecture actuel + init des valeurs
GetIfTable(buffer, &size, FALSE);
int in = buffer->table[ncard].dwInOctets;
int out = buffer->table[ncard].dwOutOctets;
//tant que l'on ne quitte pas on continue
while(start)
{
_sleep(1000);//toutes les secondes maj
//rotation des valeurs
for (i=0;i<NB_Item-1;i++)
{
items[i]=items[i+1];
itemo[i]=itemo[i+1];
}
//maj des valeurs
GetIfTable(buffer, &size, FALSE);
//copie du débit en ko
items[NB_Item-1]=(buffer->table[ncard].dwInOctets-in)/1024;
itemo[NB_Item-1]=(buffer->table[ncard].dwOutOctets-out)/1024;
//totaux
in = buffer->table[ncard].dwInOctets;
out = buffer->table[ncard].dwOutOctets;
//emplacement de refresh de la forme
/*rect.left = x_refresh;
rect.top = y_refresh;
rect.right = xx_refresh;
rect.bottom = yy_refresh;*/
//toute le forme ici
InvalidateRect(hwnd,0/*&rect*/,FALSE);
UpdateWindow(hwnd);
}
GlobalFree(buffer);
}
//------------------------------------------------------------------------------
/* This function is called by the Windows function DispatchMessage() */
POINT pt;
int mouseX,mouseY;
BOOL bCapture;
LRESULT CALLBACK WindowProcedure (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
switch (message)
{
//gestion du déplacement de la fenêtre
case WM_LBUTTONDOWN:
mouseX = LOWORD(lParam);
mouseY = HIWORD(lParam);
SetCapture(hwnd);
bCapture = 1;
return 0;
break;
case WM_LBUTTONUP:
if(GetCapture() == hwnd)
{
ReleaseCapture();
bCapture = 0;
GetCursorPos(&pt);
SetWindowPos(hwnd, 0, pt.x - mouseX, pt.y - mouseY, 0, 0, SWP_NOZORDER | SWP_NOSIZE);
}
break;
case WM_MOUSEMOVE:
if(bCapture)
{
pt.x = LOWORD(lParam);
pt.y = HIWORD(lParam);
ClientToScreen(hwnd, &pt);
SetCursor( LoadCursor( NULL , IDC_SIZEALL ));//icone de déplacement
SetWindowPos(hwnd, 0, pt.x - mouseX, pt.y - mouseY, 0, 0, SWP_NOZORDER | SWP_NOSIZE);
}
break;
//----
//on quit par un click droit
case WM_RBUTTONDOWN:
start=0;
PostQuitMessage (0);
break;
//dessin du graphique + fenêtre
case WM_PAINT:
{
PAINTSTRUCT ps;
HDC hdc=BeginPaint(hwnd,&ps);
HBRUSH Hb1 = CreateSolidBrush(RGB(0, 150, 0)); //vert
HBRUSH Hb2 = CreateSolidBrush(RGB(150, 0, 0)); //rouge
int a;
unsigned int taillephrag,nbnb;
unsigned short val,val2;
float moy=0,moyout=0;
//rect de contour global
Rectangle(hdc,0,0,xx_refresh,yy_refresh);
//les 2 autres rectangles
Rectangle(hdc,border,border,x_cadre_i,y_cadre_m);
Rectangle(hdc,border,y_cadre_m+espace,x_cadre_i,yy_refresh-border);
for (a=0;a<NB_Item;a++)
{
moy+=items[a];
moyout+=itemo[a];
//position de la barre d'état
val2 = 8+a*(5);
//down
val =y_cadre_m-(y_cadre_m-8)*items[a]/debit_dw;
if (val<8)val=8;
SelectObject(hdc,Hb1);
Rectangle(hdc,val2,val,val2+4,y_cadre_m);
//up
val =yy_refresh-border-(y_cadre_m-8)*itemo[a]/debit_up;
if (val<52)val=52;
SelectObject(hdc,Hb2);
Rectangle(hdc,val2,val,val2+4,yy_refresh-5);
}
moy = moy/NB_Item;
moyout= moyout/NB_Item;
//on ajoute les écritures max et min
char tmpMoy[256];
//min
rect.top = yy_refresh-20;
rect.bottom = yy_refresh-border;
rect.left = x_cadre_i+espace;
rect.right = xx_refresh-border;
FillRect(hdc, &rect, GetSysColorBrush(COLOR_WINDOW));
SetTextColor(hdc, GetSysColor(COLOR_MENUTEXT));
//1000 car au dessus de 999.99
if (moyout<1000)sprintf(tmpMoy,"up:%5.2fKo/s",moyout);
else if (moyout<1024000)sprintf(tmpMoy,"up:%5.2fMo/s",moyout/1024.0);
else sprintf(tmpMoy,"up:%5.2fGo/s",moyout/1048576.0);
DrawText(hdc,tmpMoy,strlen(tmpMoy), &rect, DT_VCENTER);
//max
rect.top = border;
rect.bottom = (y_cadre_m+espace)*2;
if (moyout<1000)sprintf(tmpMoy,"dw:%5.2fKo/s",moy);
else if (moyout<1024000)sprintf(tmpMoy,"dw:%5.2fMo/s",moy/1024.0);
else sprintf(tmpMoy,"dw:%5.2fGo/s",moy/1048576.0);
DrawText(hdc,tmpMoy,strlen(tmpMoy), &rect, DT_VCENTER);
//libération
DeleteObject(Hb1);
DeleteObject(Hb2);
EndPaint(hwnd,&ps);
}
break;
case WM_DESTROY:
start=0;
PostQuitMessage (0);
break;
default:
return DefWindowProc (hwnd, message, wParam, lParam);
}
return 0;
}
//------------------------------------------------------------------------------
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 = (HBRUSH) COLOR_BACKGROUND;
if (!RegisterClassEx (&wincl))
return 0;
//fenêtre sans icone dans la barre des tâche
hwnd = CreateWindowEx (WS_EX_LAYERED|WS_EX_NOACTIVATE|WS_EX_TOPMOST,szClassName,"Windows App",WS_POPUP,900,200,xx_refresh,yy_refresh,HWND_DESKTOP,NULL,hThisInstance,NULL);
//on affiche la fenêtre
ShowWindow (hwnd, 1);
//définition de l'état de transparence (0-255), 255= opaque
SetLayeredWindowAttributes(hwnd,0,150,0x02);
//timer maj
start=1;
CreateThread(NULL,0,timer,0,0,0);
//définision de la région a afficher ici non utile car = fenêtre
//HRGN region = CreateRectRgn(x_refresh,y_refresh,xx_refresh,yy_refresh);
//SetWindowRgn(hwnd,region,1);
bCapture=0;
while (GetMessage (&messages, NULL, 0, 0))
{
TranslateMessage(&messages);
DispatchMessage(&messages);
}
return messages.wParam;
}
Fichier Zip
Pour les "Membres Club", vous pouvez télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !
Télécharger le zip
Historique
- 20 avril 2008 15:49:54 :
- - new name
Sources du même auteur
Sources de la même categorie
Sources en rapport avec celle ci
Commentaires et avis
Discussions en rapport avec ce code source dans le forum
obtenir la souris dans un prog console en C et C++ [ par Stepharcher ]
Bonjour !J'aurais besoin de savoir comment récupérer la souris dans un programme console en C et en C++. J'aimerais aussi savoir si on peux diriger le
Changer le curseur de souris... [BCB] :)) [ par CodeNeo ]
Hello tout le mondeJe sais que c'est idiot comme question mais bon...J'ai commencer un casse brique en DirectX et j'ai créer un curseur de souris...Co
Changer le curseur souris par une image [ par vodkapomme43 ]
Bonjour,Je développe un petit doom en openGl (j'utilise visual c++) et j'aimerais juste savoir comment changer le curseur de la souris par u
probleme de souris en plein ecran [ par Adeon ]
Adeon j'ai un probleme, des que je passe mes jeux en plein ecran j'ai le curseur de la souris qui est creer et ca me gache mes b
curseur de souris [ par equimose ]
salut vous tousje sui toujours en sdi avec VC++et je voudrai changer mon curseur de souris ( que j'ai creer moi meme) lorsque je click sur mon menuCom
click souris [ par c2millet ]
Bonjours a tous,Je voudrais positionner mon curseur au milieu de ma fenetre et générer un click .je c qu'il faut utiliser la fonction SetCursorPos pou
Curseur de la souris avec opengl/glut [ par mondrone ]
comment faire pour rendre la souris invisible avec opengl et ou glut ? J'ai deja vu qu'on peut changer le curseur, mais pas qu'on peut soit mettre une
Curseur de la souris... [ par dbiare ]
Bonjour, Je travail sous Visual C++6. Dans mon application, j’ai une boite de dialogue et parallèlement j’ai un ‘Thread’ qui tourne en tache de fond.
Tablette graphique: WACOM desactive la saisie du curseur [ par bordeaux ]
Bonjour,je ne pense pas que ce message obtiendra des reponses, mais je le post tout de meme.Il concerne un programme que j'ai developpe et qui permet
curseur de souris [ par equimose ]
--//Equimose//--Salut à tous ! J'ai besoin de savoir programmer un curseur de souris qui change lorsque je clique sur chaque bouton de ma boite dial
|
Téléchargements
Logiciels à télécharger sur le même thème :
|