IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Windows Discussion :

Probleme de glissement de fenetre


Sujet :

Windows

  1. #1
    Membre confirmé Avatar de Flow_75
    Femme Profil pro
    Ingénieure
    Inscrit en
    Mai 2005
    Messages
    1 096
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieure
    Secteur : Transports

    Informations forums :
    Inscription : Mai 2005
    Messages : 1 096
    Points : 633
    Points
    633
    Par défaut Probleme de glissement de fenetre
    Bonjour,

    J'ai fait une fenetre ayant ces caractéristiques :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    wndclass.hInstance = NULL;
    wndclass.lpszClassName = "Main";
    wndclass.lpfnWndProc = wnd_Board;
    wndclass.cbClsExtra = 0 ;
    wndclass.cbWndExtra = 0 ;
    wndclass.hIcon = LoadIcon (NULL, IDI_APPLICATION) ;
    wndclass.hCursor = LoadCursor (NULL, IDC_ARROW) ;
    wndclass.style = 0;
    wndclass.hbrBackground =(HBRUSH) (COLOR_BTNFACE + 1);
    wndclass.lpszMenuName = NULL ;
    ainsi qu'un appel :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    hBoard = CreateWindow ("Main", "M", WS_OVERLAPPED | WS_MINIMIZEBOX | WS_SYSMENU, CW_USEDEFAULT, CW_USEDEFAULT, 488, 510, NULL, NULL, hInstance, NULL) ;
    ShowWindow(hBoard, nCmdShow);
    Puis j'affiche une image BMP dessus.

    et ca me donne ce qu'il y aen piece jointe 1
    En piece jointe 2, cela correspond au meme code sans l'affichage de l'image.

    Je ne sais pas d'ou cela vient.
    Pourriez vous m'aider ?
    Merci.
    F.

    Edit: Ayant mis comme propriété "WS_OVERLAPPEDWINDOW"
    La fenetre ne glisse plus (cool). Mais en faite, ca prend comme un cliché de ce qui a derriere, et cela reste malgré l'ajout de ce code dans WM_PAINT
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
            hDC=BeginPaint(hwnd,&paintst);
    	EndPaint(hwnd,&paintst);
    J'ai mis le resultat en piece jointe

  2. #2
    Expert éminent
    Avatar de Melem
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2006
    Messages
    3 656
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 3 656
    Points : 8 389
    Points
    8 389
    Par défaut
    Es-tu sûr que tu n'as pas oublié (dans wnd_Board) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    default:
        return DefWindowProc(hwnd, message, wParam, lParam);
    ? Poste tout ton code.

  3. #3
    Membre confirmé Avatar de Flow_75
    Femme Profil pro
    Ingénieure
    Inscrit en
    Mai 2005
    Messages
    1 096
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieure
    Secteur : Transports

    Informations forums :
    Inscription : Mai 2005
    Messages : 1 096
    Points : 633
    Points
    633
    Par défaut
    oui j'ai bien mis le DefWindowProc

    Mon code :

    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
    LRESULT CALLBACK wnd_Board(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
    {       
    	PAINTSTRUCT paintst;
    	HDC hDC;
    	switch(uMsg)
    	{
        case WM_DESTROY:
             PostQuitMessage(0);
             return 0;
        
        case WM_COMMAND :
             return 0;
        case WM_ERASEBKGND:
        case WM_PAINT:
            hDC=BeginPaint(hwnd,&paintst);
    		EndPaint(hwnd,&paintst);
            PrintBmp(hwnd,"C:\\plateau.bmp");
            return 0;
        default:
            return DefWindowProc(hwnd, uMsg, wParam, lParam);
    
    	}
    }

    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
    int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
    {
    
    MSG msg;
    HWND hBoard;
    WNDCLASS wndclass;
    
    wndclass.hInstance = hInstance;
    wndclass.lpszClassName = "Main";
    wndclass.lpfnWndProc = wnd_Board;
    wndclass.cbClsExtra = 0 ;
    wndclass.cbWndExtra = 0 ;
    wndclass.hIcon = LoadIcon (NULL, IDI_APPLICATION) ;
    wndclass.hCursor = LoadCursor (NULL, IDC_ARROW) ;
    wndclass.style = CS_HREDRAW |CS_VREDRAW;
    wndclass.hbrBackground =reinterpret_cast<HBRUSH>(COLOR_WINDOW+1);
    wndclass.lpszMenuName = NULL ;
    
    RegisterClass (&wndclass);
    
    hBoard = CreateWindow ("Main", "Flo", WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, 488, 510, NULL, NULL, hInstance, NULL) ;
    ShowWindow(hBoard, SW_SHOW);
    
     while(GetMessage(&msg, NULL, 0, 0))
     {
    
         TranslateMessage(&msg);
         DispatchMessage(&msg);
     }
        return 0;
    }
    Merci de l'aide

  4. #4
    Membre confirmé Avatar de Flow_75
    Femme Profil pro
    Ingénieure
    Inscrit en
    Mai 2005
    Messages
    1 096
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieure
    Secteur : Transports

    Informations forums :
    Inscription : Mai 2005
    Messages : 1 096
    Points : 633
    Points
    633
    Par défaut
    En elevant WM_ERASEBKGND ca marche mieux
    Je l'avais mis avant de trouver pour

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
            hDC=BeginPaint(hwnd,&paintst);
    		EndPaint(hwnd,&paintst);
    Et j'ai oublié de le retirer apres....

    Merci.
    Florent

  5. #5
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    Enfin, je te conseillerais de mettre l'affichage du plateau dans le traitement de WM_ERASEBKGND (et celui des pièces dans le WM_PAINT)...
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  6. #6
    Membre confirmé Avatar de Flow_75
    Femme Profil pro
    Ingénieure
    Inscrit en
    Mai 2005
    Messages
    1 096
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieure
    Secteur : Transports

    Informations forums :
    Inscription : Mai 2005
    Messages : 1 096
    Points : 633
    Points
    633
    Par défaut
    Citation Envoyé par Médinoc Voir le message
    Enfin, je te conseillerais de mettre l'affichage du plateau dans le traitement de WM_ERASEBKGND (et celui des pièces dans le WM_PAINT)...
    ok, merci du conseil.

  7. #7
    Membre confirmé Avatar de Flow_75
    Femme Profil pro
    Ingénieure
    Inscrit en
    Mai 2005
    Messages
    1 096
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieure
    Secteur : Transports

    Informations forums :
    Inscription : Mai 2005
    Messages : 1 096
    Points : 633
    Points
    633
    Par défaut
    Citation Envoyé par Médinoc Voir le message
    Enfin, je te conseillerais de mettre l'affichage du plateau dans le traitement de WM_ERASEBKGND (et celui des pièces dans le WM_PAINT)...
    Juste une question, pour ma culture personnelle.
    Pourquoi conseillerais tu de faire cela ?

    Merci.

  8. #8
    Expert éminent
    Avatar de Melem
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2006
    Messages
    3 656
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 3 656
    Points : 8 389
    Points
    8 389
    Par défaut
    Surtout pour des raisons d'optimisation mais aussi pour une meilleure organisation du code. Un BeginPaint ne provoque pas toujours un WM_ERASEBKGND (renseigne-toi sur cette fonction, la structure PAINTSTRUCT et tout ça ...), un WM_ERASEBKGND est donc généré moins de fois qu'un WM_PAINT. Ce que tu peux dessiner dans le traitement de WM_ERASEBKGND, dessine-le donc sans attendre .

  9. #9
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    Et aussi tout simplement pour raisons sémantiques: WM_ERASEBACKGROUND est dédié à l'arrière-plan...
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. probleme pour cacher une fenetre
    Par warubi dans le forum C++
    Réponses: 1
    Dernier message: 24/03/2007, 20h44
  2. Probleme de redimensionnement sous fenetre
    Par sidjunvik dans le forum GLUT
    Réponses: 3
    Dernier message: 30/01/2007, 17h13
  3. [MFC] probleme de detection de fenetre
    Par jiraya43 dans le forum MFC
    Réponses: 8
    Dernier message: 10/05/2006, 10h48
  4. Probleme de reduction de fenetre
    Par gilles641 dans le forum API, COM et SDKs
    Réponses: 16
    Dernier message: 30/08/2005, 08h04
  5. [C#] Probleme de dimensionnement des fenetres en MDI
    Par stephdiplo150 dans le forum Windows Forms
    Réponses: 2
    Dernier message: 28/05/2004, 19h05

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo