begin process at 2012 05 30 11:06:44
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C

 > 

Windows

 > 

Autre

 > 

rachraichissement fenetre winapi en c


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

rachraichissement fenetre winapi en c

vendredi 2 janvier 2009 à 13:45:19 | rachraichissement fenetre winapi en c

dyroj

bonjour a tous,
sa faire quelque semain que j'ai un gros probleme avec le rechaichissement winapi, se probleme menpaiche d'avancer dans mais projet.
se que je veut créer des jeu en 2d, et j'ai compri le principe mais le probleme c'est quand je deplace une forme geometrique, une image ... je suis obliger de rafraichir toute la fenetre ou juste le rectangle qui se deplace toute le milli second(ou autre ect...)et c'est la que survien le problem au bou de quelque minute dutilisation du programme ma le rectangle ne se deplace plus et la fenetre je decolor quand je la deplace elle devient blanche , enfin je vous epargne les detaille, en tou cas je me suis bien penché sur le probleme et j'en est deduis que sela venai de du rafraichissement car meme quand j'enlaive le deplasement du rectangle sa provoque le meme bug.
voila le un le code avec le rectangle:

#include <windows.h>
#include <stdlib.h>


#define direc_droite 011
#define direc_gauche 012
#define direc_haut 013
#define direc_bas 014

LRESULT CALLBACK  Proc_principale (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam);

int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nCmdShow)
{
    WNDCLASS wc;
    MSG msg;
    char szCn[]="standard";
    HACCEL hAccel;
    HWND hwnd;

   
    inst=hInstance;

    wc.style=CS_HREDRAW|CS_VREDRAW;
    wc.lpfnWndProc=Proc_principale;
    wc.cbClsExtra=0;
    wc.cbWndExtra=0;
    wc.hInstance=hInstance;
    wc.hIcon=LoadIcon(hInstance,"IDI_ICON");
    wc.hCursor=LoadCursor(NULL,IDC_ARROW);
    wc.hbrBackground=CreateSolidBrush(0xFFFFFF);
    wc.lpszMenuName=NULL;
    wc.lpszClassName=szCn;
    RegisterClass(&wc);

   

    hwnd=CreateWindowEx(0,szCn,"test",WS_SYSMENU|WS_CAPTION|WS_MINIMIZEBOX|WS_VISIBLE,CW_USEDEFAULT,CW_USEDEFAULT,800,600,NULL,NULL,hInstance,0);


    hAccel=LoadAccelerators(hInstance,"IDA_ACCELERATOR");
    while(GetMessage(&msg,NULL,0,0)==1)
    {
        if(TranslateAccelerator(hwnd,hAccel,&msg)==0)
        {
            TranslateMessage(&msg);
            DispatchMessage(&msg);
        }
    }

    return msg.wParam;
}

RECT dim_rect={100,100,150,150};

LRESULT CALLBACK  Proc_principale (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
   

    switch (message)
    {
        //redessine la fenetre
        case WM_PAINT:
        {
             HPEN crayon = CreatePen(PS_SOLID, 3, RGB(0, 255, 0));
        HBRUSH fon = CreateSolidBrush(RGB(255,0,0));
            HBITMAP hBmp;
   PAINTSTRUCT ps;
   HDC hDC, hMemDC;

   hDC = BeginPaint(hwnd, &ps);
   hMemDC = CreateCompatibleDC(hDC);
   hBmp = CreateCompatibleBitmap(hDC, 800, 600);
   SelectObject(hMemDC, hBmp);
           
            // contours noirs des yeux
   //SelectObject(hMemDC, crayon);
   SelectObject(hMemDC, fon);
            Ellipse(hMemDC, dim_rect.left, dim_rect.top, dim_rect.right, dim_rect.bottom);
   //Ellipse(hMemDC, CX, 0, CX+CX-1, CY-1);
   
   

   // on affiche d'un coup le MemDC
   BitBlt(hDC, 0, 0, 800, 600, hMemDC, 0, 0, SRCCOPY);
   DeleteObject(hBmp);
   DeleteDC(hMemDC);
   EndPaint(hwnd, &ps);
        }
        return 0;
        //********************

        //création des control
        case WM_CREATE:
        {
            
        }
        return 0;
        //********************

        //les evenement
        case WM_COMMAND:
        {
           
        }
        return 0;
        //************
        case WM_KEYDOWN:
             switch (wParam) 
             {
                    case VK_RIGHT:
                         SetTimer(hwnd, direc_droite, 1, 0);
                    return 0;
                 
                    case VK_LEFT:
                         SetTimer(hwnd, direc_gauche, 1, 0);
                    return 0;
                   
                    case VK_DOWN:
                         SetTimer(hwnd, direc_haut, 1, 0);
                    return 0;
                   
                    case VK_UP:
                         SetTimer(hwnd, direc_bas, 1, 0);
                    return 0;
             }
        return 0;
       
        case WM_KEYUP:
             switch (wParam) 
             {
                    case VK_RIGHT:
                         KillTimer(hwnd, direc_droite);
                    return 0;
                   
                    case VK_LEFT:
                         KillTimer(hwnd, direc_gauche);
                    return 0;
                   
                    case VK_DOWN:
                         KillTimer(hwnd, direc_haut);
                    return 0;
                   
                    case VK_UP:
                         KillTimer(hwnd, direc_bas);
                    return 0;
             }
        return 0;
        case WM_TIMER:
             switch (wParam) 
             {
                    case direc_droite:
                         dim_rect.left +=5;
                         dim_rect.right+=5; 
                         //InvalidateRect(hwnd, &dim_rect_eff, TRUE);
                        // InvalidateRect(hwnd, &dim_rect, TRUE);
                        InvalidateRect(hwnd, NULL, FALSE);
                     UpdateWindow(hwnd);
                    return 0;
                   
                    case direc_gauche:
                         dim_rect.left -=5;
                         dim_rect.right-=5;
                         //InvalidateRect(hwnd, &dim_rect_eff, TRUE);
                         //InvalidateRect(hwnd, &dim_rect, TRUE);
                         InvalidateRect(hwnd, NULL, FALSE);
                     UpdateWindow(hwnd);
                    return 0;
                   
                    case direc_haut:
                         dim_rect.top+=5;
                         dim_rect.bottom+=5;
                         //InvalidateRect(hwnd, &dim_rect_eff, TRUE);
                         //InvalidateRect(hwnd, &dim_rect, TRUE);
                         InvalidateRect(hwnd, NULL, FALSE);
                     UpdateWindow(hwnd);
                    return 0;
                             
                    case direc_bas:
                         dim_rect.top-=5;
                         dim_rect.bottom-=5;
                         //InvalidateRect(hwnd, &dim_rect_eff, TRUE);
                         //InvalidateRect(hwnd, &dim_rect, TRUE);
                         InvalidateRect(hwnd, NULL, FALSE);
                     UpdateWindow(hwnd);
                    return 0;         
             }
        return 0;
       
        case WM_CLOSE:
            DestroyWindow(hwnd);
        return 0;

        case WM_DESTROY:
            PostQuitMessage(0);
        return 0;

        default:
                return DefWindowProc(hwnd, message, wParam, lParam);
    }
}

bon voila si vous nava pas compri quelque chose nesiter pas a me le dire car je sais que je mexprime mal.
merci et a ++.

vendredi 2 janvier 2009 à 13:49:06 | Re : rachraichissement fenetre winapi en c

dyroj

je vient de remarquer les faute que j'ai fait et je men excuse.
vendredi 2 janvier 2009 à 17:35:10 | Re : rachraichissement fenetre winapi en c

uaip

je viens de remarquer les fautes que j'ai faites et je m'en excuse.
Tu n'y es pas allé de main morte, là, sur l'orthographe... désolé mais du coup je n'ai rien compris à ton problème.

Cordialement, uaip.
vendredi 2 janvier 2009 à 18:59:48 | Re : rachraichissement fenetre winapi en c

ed73

Réponse acceptée !

Bonsoir,

Libère les ressources crayon et fon dans WM_PAINT

DeleteObject(crayon);

DeleteObject(fon);

ed73

vendredi 2 janvier 2009 à 19:49:33 | Re : rachraichissement fenetre winapi en c

dyroj

je te remerci du fon du coeur ed73.

sa marche a la perfection .

adieu.



Cette discussion est classée dans : case, rect, hwnd, return, direc


Répondre à ce message

Sujets en rapport avec ce message

probleme de menu [ par Stubbornman ] Bonsoir a tous,J'ai un soucis avec des menus. Je souhaite creer des fenetres filles qui ont chacune un menu. Or je n'arrive pas a afficher les menus d PROBLEME DE CHARGEMENT JPEG DANS UN ECRAN DE VEILLE [ par Batman60 ] bonjourclic droit sur l'exe et puis "tester" le prog fonctionne à merveille mais une fois installé à l'execution de l'ecran de veille les textures jpe Problème d'enregistrement avant de quitter [ par julien_boss ] Un problème assez chiant il faut dire. Voilà, je vous explique :le client quitter sur la pitite croix rouge, direction message WM_CLOSE :        case Hep Hep Hep [ par Joky ] Salut les gens :pPtit Pb, me lancer pas de cailloux s'il vous plait ;)Bon me lance dans vc++ 6.0 win32jdéfinie tout mes controle de fenetreIDC_EDIT et Help Au secours [ par NAVIE ] Bonjour, j'écris ce message pour un problème que j'ai avec un de mes programmes. Je compile avec DevCpp Version 4.9.9.2 et j'ai crée deux fichiers sou Problème de class [ par sran_isback ] salut! Voila j'ay crée un programme pour gerer un petit robot. Dans le principe ce robot est piloté par des ia (dans la classe ia), et une "entité s api window [ par ropars ] Bonjour<br winsock et WSAAsyncSelect [ par lektrosonic ] bonjour, j'ai code deux petites applications (client et serveur) et aux deux g applique la WSAAsyncSelect pour FD_READ, FD_CLOSE , FD_CONNECT (pour le DefWindowProc [ par Renfield ] Bonjour....Où pointe DefWindowProc ? A-t'on la possibilité de modifier cette addresse, pour une fenêtre précise ?pour test, dans ma proc de gestion de pb affichage ComboBox dans Dialog [ par Guillemouze ] Salut tout le monde,j'ai un souci d'affichage de mon combo dans un dialog. Quand je click sur la fleche pour afficher la liste, il ne m'affiche rien!P


Nos sponsors


Sondage...

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 1,716 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales