bonjours sur un tuto sur l'API Win32 que je suis sur un site , il me donne se code source, je le copi colle dans dev C++, je le compile et je l'exécute, mais il apparait de nombreuses erreurs alors que simplement copier coller...comment peut on apprendre quelque chose s'il y a des erreur partout?
Pouvez vous me corriger leur code source ou pouvez vous me donner un tuto sans erreur dans leur code source.
if(!RegisterClass (&wndclass)) {
MessageBox (NULL, TEXT ("Problème!"),szAppName, MB_ICONERROR) ; return0 ; }
hwnd = CreateWindow (szAppName, // nom de la classe "Réalité Virtuelle", // titre de la fenêtre
WS_OVERLAPPED | WS_CAPTION | WS_SYSMENU
| WS_MINIMIZEBOX | WS_VISIBLE , // style de la fenêtre
CW_USEDEFAULT, // position initiale en x
CW_USEDEFAULT, // position initiale en y 190, // largeur initiale 180, // hauteur initiale NULL, // handle de la fenêtre mère NULL, // handle du menu de la fenêtre
hInstance, // handle de l'instance NULL) ; // paramètres de création
LRESULT CALLBACK WndProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) { static HBITMAP hbitmap; // pour le bitmap
switch(message) { case WM_KEYDOWN: switch(wParam) { case VK_UP: // creation d'un rectangle
RECT rect;
rect.top=0;
rect.left=20;
rect.bottom=115;
rect.right=52; // maintenant k change la valeur des couleurs des pixels
k+=50; if(k>250) k=0; // on demande à redessiner la zone de rect avec un message WM_PAINT
InvalidateRect(hwnd,&rect,FALSE); // c'est plus beau de ne pas effacer la zone avant de la redessiner // cela évite les clignotements break; case VK_ESCAPE:
DestroyWindow(hwnd); break; default: break;
} break;
case WM_PAINT:
HDC hdc;HDC hdcMemory;
PAINTSTRUCT ps;
hdc=BeginPaint(hwnd,&ps); // obtient un handle de contexte de périphérique
// un peu de texte
SetBkColor(hdc,RGB(0,0,255));
SetTextColor(hdc,RGB(255,255,0));
TextOut(hdc,10,3,"Texte ->",strlen("Texte ->"));
char tab[20];
SetTextAlign(hdc,TA_RIGHT | TA_TOP );
SetBkColor(hdc,RGB(0,255,200));
SetTextColor(hdc,RGB(255,0,0));
TextOut(hdc,170,3,tab,sprintf(tab,"<- Texte")); // sprintf renvoit la longueur de la chaîne
SetTextAlign(hdc,TA_LEFT | TA_TOP );
SetBkColor(hdc,RGB(255,0,0));
SetTextColor(hdc,RGB(30,30,30));
TextOut(hdc,20,125,"Pressez flèche haut ",strlen("Pressez flèche haut "));
// un bitmap
BITMAP bm;
hbitmap=(HBITMAP) LoadImage(NULL,"image.bmp",IMAGE_BITMAP,0,0,LR_LOADFROMFILE);
hdcMemory=CreateCompatibleDC(NULL);
SelectObject(hdcMemory,hbitmap);
GetObject(hbitmap,sizeof(bm),&bm);
BitBlt(hdc,20,20,bm.bmWidth,bm.bmHeight,hdcMemory,0,0,SRCCOPY); // Zoom sur la partie supérieur droite
StretchBlt(hdc,55,20,100,100,hdcMemory,16,16,16,16,SRCCOPY);
DeleteDC(hdcMemory);
// On affiche un petit pixel int i,j; for(j=0;j<=32;j++) for(i=0;i<=60;i++)
SetPixel(hdc,20+j,55+i,RGB(i*4,j*4,k+4));
EndPaint(hwnd,&ps); // libère un handle de contexte de périphérique break;
case WM_DESTROY:
DeleteObject(hbitmap);
PostQuitMessage (0) ; return0 ;
Ensuite dans votre fonction WndProc vous déclarez des variables dans des cas de switch ce n'est pas autorisé directement. Soit vous insérer un bloc avec des accolades { et } dans les cas de votre switch soit vous sortez les déclarations de variables de votre instruction swicth
Exemple :
swicth test { case0 : {/* début d'un bloc de code */ /* ici vous pouvez déclarer des variables */ /* et mettre les instructions à exécuter pour le cas 0 de votre instruction switch */ }/* fin du bloc de code */ break; case1 : {/* début d'un bloc de code */ }/* fin du bloc de code */ break; default : }
Vous devez donc modifiez
case VK_UP: { // creation d'un rectangle
RECT rect;
rect.top=0;
rect.left=20;
rect.bottom=115;
rect.right=52; // maintenant k change la valeur des couleurs des pixels
k+=50; if(k>250) k=0; // on demande à redessiner la zone de rect avec un message WM_PAINT
InvalidateRect(hwnd,&rect,FALSE); // c'est plus beau de ne pas effacer la zone avant de la redessiner // cela évite les clignotements } break;
et
case WM_PAINT: {
HDC hdc;HDC hdcMemory;
PAINTSTRUCT ps;
hdc=BeginPaint(hwnd,&ps); // obtient un handle de contexte de périphérique
// un peu de texte
SetBkColor(hdc,RGB(0,0,255));
SetTextColor(hdc,RGB(255,255,0));
TextOut(hdc,10,3,"Texte ->",strlen("Texte ->"));
char tab[20];
SetTextAlign(hdc,TA_RIGHT | TA_TOP );
SetBkColor(hdc,RGB(0,255,200));
SetTextColor(hdc,RGB(255,0,0));
TextOut(hdc,170,3,tab,sprintf(tab,"<- Texte")); // sprintf renvoit la longueur de la chaîne
SetTextAlign(hdc,TA_LEFT | TA_TOP );
SetBkColor(hdc,RGB(255,0,0));
SetTextColor(hdc,RGB(30,30,30));
TextOut(hdc,20,125,"Pressez flèche haut ",strlen("Pressez flèche haut "));
// un bitmap
BITMAP bm;
hbitmap=(HBITMAP) LoadImage(NULL,"image.bmp",IMAGE_BITMAP,0,0,LR_LOADFROMFILE);
hdcMemory=CreateCompatibleDC(NULL);
SelectObject(hdcMemory,hbitmap);
GetObject(hbitmap,sizeof(bm),&bm);
BitBlt(hdc,20,20,bm.bmWidth,bm.bmHeight,hdcMemory,0,0,SRCCOPY); // Zoom sur la partie supérieur droite
StretchBlt(hdc,55,20,100,100,hdcMemory,16,16,16,16,SRCCOPY);
DeleteDC(hdcMemory);
// On affiche un petit pixel int i,j; for(j=0;j<=32;j++) for(i=0;i<=60;i++)
SetPixel(hdc,20+j,55+i,RGB(i*4,j*4,k+4));
EndPaint(hwnd,&ps); // libère un handle de contexte de périphérique } break;
Ou alors supprimez les déclarations de variables à l'intérieur de l'instruction switch et les ajouter au début de votre fonction.
LRESULT CALLBACK WndProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) { static HBITMAP hbitmap; // pour le bitmap
RECT rect;
HDC hdc;HDC hdcMemory;
PAINTSTRUCT ps;
switch(message) { /* ici le reste du code */
J'espère avoir répondu à vos questio
problème avec mon code source (API Win32)
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.