Bonjour à tous!
Je travaille actuellement sur un petit projet utilisant l'api Win32 avec le c++ et je me trouve confronté à un problème;
Je dois afficher un rectangle translucide sur le bureau et pouvoir lancer des applications avec le clique de souris
même si ce rectangle se trouve par dessus. Jusque là tout vas bien, j'ai réussi à dessiner directement sur le bureau
avec GDI+ donc le clique de la souris fonctionne normalement. Cependant je souhaiterais que mon rectangle puisse
bouger, donc pour cela il faudrait que je force le bureau windows à se redessiner.
J'ai déjà essayé de nombreuse fonctions de l'api, par exemple InvalideRect() suivie de UpdateWindows() ou RedrawWindow mais rien ne marche...
Je vous met le code que j'ai fait:
Lorsque que j'utilise ma fonction drawRect pour une fenêtre que j'ai créé et non pas pour le bureau la fenêtre s'efface bien avant
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39 #include <windows.h> #include <objidl.h> #include <gdiplus.h> using namespace Gdiplus; #pragma comment (lib,"Gdiplus.lib") void drawRect(HWND hinstance_window, int x) { /*****bout de code qui doit redessiner l'affichage d'une fenêtre**** *************mais ne fonctionne pas pour le bureau..*******************/ InvalidateRect(hinstance_window, NULL, TRUE); UpdateWindow(hinstance_window); /***************************************/ SolidBrush brush(Color(100, 10, 30, 215)); Graphics graphics(GetDC(hinstance_window)); graphics.FillRectangle(&brush, x, 0, 200, 200); Sleep(100); } int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE, PSTR, INT iCmdShow) { GdiplusStartupInput gdiplusStartupInput; ULONG_PTR gdiplusToken; PAINTSTRUCT ps; HWND hwnd_win = GetDesktopWindow(); //HDC hdc = GetDC(hwnd_win); GdiplusStartup(&gdiplusToken, &gdiplusStartupInput, NULL); drawRect(hwnd_win, 20); //Le premier rectangle dessiné devrait s'effacer quand on rappel la fonction drawRect(hwnd_win, 200); //GdiplusShutdown(gdiplusToken); //plante si on dé-commente return 0; }
de redessiner dedans. Une solution serait de créer une fenêtre transparente en plain écran et de dessiner dessus mais le clique de
la souris ne traverserait plus l'écran et quand je met ma fenêtre transparente c'est tous se que je dessine dessus qui devient aussi
transparent donc dessiner sur le bureau reste une meilleure solution pour l'instant.
Voilà donc si vous avez une idée de comment redessinez ce bureau je suis preneur!![]()
Partager