Bonjour,

J'ai quelques bases en c pour faire des petites applications console mais je débute totalement avec win 32

Je dois faire un test simple avec la lib win 32:

Une boucle qui s'exécute toutes les x millisecondes me rafraichit la fenêtre en choisissant au hasard les couleurs des pixels.


Je suppose que c'est pas très compliqué mais je suis un peu perdu dans tous les tutoriels.



Voici mon code, pour le moment j'arrive à faire une manipulations de pixels statiques comme ceci (là j'affiche deux pixels blancs tout pourris)


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
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
#include <windows.h>
 
LPCTSTR ClsName = L"BasicApp";
LPCTSTR WndName = L"Test de merde";
 
INT a = 0;
 
 
LRESULT CALLBACK WndProcedure(HWND hWnd, UINT uMsg,
			      WPARAM wParam, LPARAM lParam);
 
INT WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
               LPSTR lpCmdLine, int nCmdShow)
{
	MSG        Msg;
	HWND       hWnd;
	WNDCLASSEX WndClsEx;
 
 
	WndClsEx.cbSize        = sizeof(WNDCLASSEX);
	WndClsEx.style         = CS_HREDRAW | CS_VREDRAW;
	WndClsEx.lpfnWndProc   = WndProcedure;
	WndClsEx.cbClsExtra    = 0;
	WndClsEx.cbWndExtra    = 0;
	WndClsEx.hIcon         = LoadIcon(NULL, IDI_APPLICATION);
	WndClsEx.hCursor       = LoadCursor(NULL, IDC_ARROW);
	WndClsEx.hbrBackground = (HBRUSH)GetStockObject(BLACK_BRUSH);
	WndClsEx.lpszMenuName  = NULL;
	WndClsEx.lpszClassName = ClsName;
	WndClsEx.hInstance     = hInstance;
	WndClsEx.hIconSm       = LoadIcon(NULL, IDI_APPLICATION);
 
 
	RegisterClassEx(&WndClsEx);
 
	hWnd = CreateWindow(ClsName,
			  WndName,
			  WS_OVERLAPPEDWINDOW,
			  CW_USEDEFAULT,
			  CW_USEDEFAULT,
			  CW_USEDEFAULT,
			  CW_USEDEFAULT,
			  NULL,
			  NULL,
			  hInstance,
			  NULL);
 
 
	if( !hWnd ) 
		return 0; 
 
 
	ShowWindow(hWnd, SW_SHOWNORMAL);
	UpdateWindow(hWnd);
 
 
 
 
 
	while( GetMessage(&Msg, NULL, 0, 0) )
	{
 
        TranslateMessage(&Msg);
        DispatchMessage(&Msg);
	}
 
 
 
	return Msg.wParam;
}
 
 
 
 
LRESULT CALLBACK WndProcedure(HWND hWnd, UINT Msg,
			   WPARAM wParam, LPARAM lParam)
{
 
	OutputDebugString(L"DEBUT WIN PROCEDURE\n");
 
 
 
	a=a+1;
 
	// test d'affichage
 
	PAINTSTRUCT ps;
	HDC hdc = BeginPaint(hWnd, &ps);
 
	SetPixel(hdc, 50+a, 50, RGB(255,255,255));
	SetPixel(hdc, 100+a, 100, RGB(255,255,255));
 
	EndPaint(hWnd, &ps);
 
 
 
 
    switch(Msg)
    {
 
    case WM_DESTROY:
 
        PostQuitMessage(WM_QUIT);
        break;
    default:
 
        return DefWindowProc(hWnd, Msg, wParam, lParam);
    }
 
    return 0;
}

mais je ne trouve pas comment rafraichir ma fenêtre mettons tous les 16 millisecondes

et j'aimerais savoir s'il n'y a pas une manière plus rapide de manipuler les pixels, en accédant directement à un tableau d'integer 32.