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

C++ & C++ .NET

 > 

Divers

 > 

Débutant(e)

 > 

Il manque une partie de l'image (fond d'une fenêtre)


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

Il manque une partie de l'image (fond d'une fenêtre)

jeudi 21 décembre 2006 à 12:12:22 | Il manque une partie de l'image (fond d'une fenêtre)

papi2

Bonjour,
Quand je peux mettre l'image entière, elle ne prend pas les dimentions de MAXIMIZE (par exemple).
Avec ce code:
Je n'ai qu'une portion de l'image que j'ai mis en fond (d'une fenêtre).
#include <windows.h>
#include "Projet1_private.h"
#define BITMAP_X  200
#define BITMAP_Y  150
[......]
PAINTSTRUCT ps;
RECT rect;
HGLOBAL hgbl;
HDC hdc, hdc2;
HBITMAP hbmp;
[......]
hbmp = LoadBitmap(hThisInstance, (LPCTSTR)IDB_BITMAP1);
[......]
 hdc = BeginPaint( hwnd, &ps );
           GetClientRect(hwnd,&rect);
           hdc2 = CreateCompatibleDC(hdc);
          SelectObject(hdc2, hbmp); 
      StretchBlt(hdc, 0, 0, rect.right, rect.bottom, hdc2, 0, 0, BITMAP_X, BITMAP_Y, SRCCOPY);
 Si je mets ceci:
StretchBlt(hdc,0,0,340,441,hdc2,0,0,340,441, SRCCOPY);
 
  j'ai l'image entière mais lorsque j'agrandi la fenêtre, elle reste intacte.
         DeleteDC(hdc2);    
     EndPaint( hwnd, &ps );
        break; 
J'ai cherché, tout retourner pour trouver une piste mais je n'ai rien fait de bien concluant...
Si vous pouviez m'aider pour qu'elle soit entière et qu'elle suive les dimentions de la fenêtre lorsque je l'agrandi.
Je programme avec DEV-C++ 4.9.9.2
Merci


jeudi 21 décembre 2006 à 22:08:41 | Re : Il manque une partie de l'image (fond d'une fenêtre)

racpp

Administrateur CodeS-SourceS
Réponse acceptée !
Salut,
C'est normal car apparemment, BITMAP_X et BITMAP_Y ne correspondent pas aux dimensions réelles de l'image. Ils doivent corrrespondre respectivement à la largeur et la hauteur de l'image en pixels. Pour le redimensionnement il faudra traiter le message WM_SIZING ou WM_SIZE. Si c'est une image de fond, il est  préférable de la dessiner pendant WM_ERASEBKGND au lieu de WM_PAINT.
Voici un exemple:
LRESULT CALLBACK WndProc(.........)
{
    static HDC hdc2;
    static HBITMAP hbmp;
    RECT rect;
    switch(msg)
    {
    case WM_CREATE:
    {
        HDC hDC = GetDC(0);
        hdc2 = CreateCompatibleDC(hDC);
        hbmp = LoadBitmap(GetModuleHandle(0), (LPCTSTR)IDB_BITMAP1);
        SelectObject(hdc2, hbmp);
        ReleaseDC(0, hDC);
        return 0;
    }
    case WM_ERASEBKGND:
    {
        GetClientRect(hwnd,&rect);
        StretchBlt((HDC)wParam, 0, 0, rect.right, rect.bottom, hdc2, 0, 0, BITMAP_X, BITMAP_Y, SRCCOPY);
        return 1;
    }
    case WM_SIZING:
    {
        GetClientRect(hwnd,&rect);
        HDC winDC=GetDC(hwnd);
        StretchBlt(winDC, 0, 0, rect.right, rect.bottom, hdc2, 0, 0, BITMAP_X, BITMAP_Y, SRCCOPY);
        ReleaseDC(hwnd,winDC);     
        return 0;
    }
    //.....
    }
return DefWindowProc(hwnd,msg,wParam,lParam);
}

Si tu veux traiter WM_SIZE au lieu de WM_SIZING tu fais:
case WM_SIZE:
{
    HDC winDC=GetDC(hwnd);
    StretchBlt(winDC, 0, 0, LOWORD(lParam), HIWORD(lParam), hdc2, 0, 0, BITMAP_X, BITMAP_Y, SRCCOPY);
    ReleaseDC(hwnd,winDC);
    return 0;
}


vendredi 22 décembre 2006 à 09:09:40 | Re : Il manque une partie de l'image (fond d'une fenêtre)

papi2

Bonjour Racpp
Je n'ai pas pu te répondre plus tôt car mon ordi à CLAQUé... (juste au moment où je t'envoyais le message) !
Alors j'ai trouvé une autre machine pour te remercier au plus tôt!!!
Ca fonstionne et cerise sur le gâteau:
j'ai mis "MAXIMIZE et POPUP" et j'ai un plein écran !!!!!
Je ne sais pas comment vous arrivé à trouver et ingurgiter toutes ces formules... c'est formidable...!
Encore merci.
A+


Cette discussion est classée dans : image, rect, fenêtre, hdc, hdc2


Répondre à ce message

Sujets en rapport avec ce message

Afficher une image Jpeg dans une fenêtre (en fond) [ par JayC ] Salut !J'essaye d'afficher une image dans mon application en VC++ (j'utilise VC++ 6.0) et je sais vraiment pas comment faire.En fait ce que je voudrai comment déplacer un bmp dans une fenêtre graphique? [ par seb1664 ] comment faire des simples translations horizontales et verticales d'une image bmp dans une fenêtre graphique.Le pb est surtout que je n'ai aucune idée LoadImage DevC++ [ par guitoulefoux ] Bonjour,Je cherche a mettre un fond d'écran dans ma form.Pour cela il faudrait que j'utilise loadimage.Je pense déjà avoir pas bien avancé (Merci BruN DevC++ Fond d'ecran. [ par guitoulefoux ] Bonjour,Je cherche a afficher un fond d'ecran dans ma form.Grace a BruNews a qui je dis un grand merci ( je te paye une mousse quand tu veux), j'ai pu need help_API - debutant. [ par JimyRyan ] j'ai cree un progamme qui affiche une image (stoquee dans un fichier .bmp), et une phrase (lu a partir d'un fichier TXT), j'ai deux problemes : une fo Instertion dynamique d'une image sur le fond d'une fenêtre [ par raidentr ] Avec VC++ 6.0 :Est-ce possible d'insérer une image dynamiquement avec la commande CREATEWINDOWSEX ? Si oui quelle est la ligne de commande exacte ? en [API Win32]centrer une image mise en background [ par sethesh ] Salut à tous dans une appli Win32 j'affiche une image en background en fond de ma fenetre principale. Cette image est centrée en haut a gauche par def activer une fenetre dans une appli MDI [ par arno2004 ] Bonjourj'ai récupérer un éditeur de dessin. j'y est ajouter une fonction'ci dessous) pour copier une zone sélectionnée dans une nouvelle fenêtre. la f Supprimer l'image (icone) [ par icedreamer ] Bonjour !Je charge une image (icone) de cette maniere :LoadIcon(GetModuleHandle(NULL), MAKEINTRESOURCE(IDI_ICON_SYS)); hDc=GetDC(hwnd); DrawState(hD afficher une image contenue dans un HDC [ par aujeanfr ] Bonjour,j'essaie d'afficher une image contenue dans un HDC après un traitement d'image avec setpixel().Voici mon code : // je fais mon traitement d'im


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 : 0,421 sec (3)

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