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

MFC Discussion :

[GDI]Affichage d'un bitmap


Sujet :

MFC

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    92
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 92
    Par défaut [GDI]Affichage d'un bitmap
    Bonjour à tous,

    J'essaye simplement d'afficher un bitmap dans une fenêtre toute juste créée. Le code utilisé est le suivant :

    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
     
    bool maClasse::DisplayWindow(HWND hWnd, DWORD Width, DWORD Height)
    {
          DDSURFACEDESC2  DDSD;
          HBITMAP g_hBitmap;
          HDC		hDC;
          BOOL	result;
     
            WNDCLASSEX windowClass;
            RECT rcAdjusted = { 0, 0, DEFAULT_SCREEN_WIDTH, DEFAULT_SCREEN_HEIGHT };
            int XPos = ...;
            int YPos = ....;
            DWORD dwStyle = ....;
     
            ZeroMemory(&windowClass, sizeof(WNDCLASSEX));
            windowClass.cbSize        = sizeof(WNDCLASSEX);                                      
            windowClass.style         = CS_HREDRAW | CS_VREDRAW | CS_OWNDC | CS_DBLCLKS;         
            windowClass.lpfnWndProc   = (WNDPROC)WindowProc;                                                   
            windowClass.hInstance     = NULL;                                                                    
            windowClass.hbrBackground = (HBRUSH)GetStockObject(BLACK_BRUSH);
            windowClass.hIcon         = LoadIcon(NULL, IDI_APPLICATION);              
            windowClass.hIconSm       = LoadIcon(NULL, IDI_APPLICATION);               
            windowClass.hCursor       = LoadCursor(NULL, IDC_ARROW);              
            windowClass.lpszClassName = "Ma Window";                                          
     
            RegisterClassEx(&windowClass);
            hWindow = CreateWindowEx(
                WS_EX_STATICEDGE,
                "Ma Window", 
                "(c)Me", 
               ..);
     
    	hDC = GetDC(hWindow );
    	g_hBitmap = (HBITMAP)LoadImage(NULL,"C:\\icon_web.bmp",IMAGE_BITMAP,0,0,LR_LOADFROMFILE);
    	result = DrawState(hDC,NULL,NULL,LPARAM)g_hBitmap,0,0,0,0,0,DST_BITMAP);
     
    	ShowWindow(hWindow, SW_SHOWNORMAL);
    Quand je fais ça, une fenêtre s'ouvre effectivement mais le bitmap n'apparait pas. L'intérieur de la fenêtre est entièrement noir, je suppose que le couleur est définie après ça et que peut-être ça masque mon bitmap...
    Où serait-ce une erreur de code?

    Merci d'avance

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    92
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 92
    Par défaut
    Je viens de comprendre. La couleur est définie comme paramètre de ma structure WNDCLASSEX => champ hbrBackground.

    Ce que je veux faire est simplement afficher un petit bitmap en surimpression.

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    92
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 92
    Par défaut
    J'ai trouvé. Je m'y prenais pas du tout comme il faut.

    Il faut créer puis afficher le bitmap lors de l'interception des messages. En résumé, on registre, on crée, on affiche la fenêtre puis lors de l'interception du message 'Wm_CREATE', on load le bitmap en mémoire puis lors de l'interception du message 'Wm_PAINT', on l'affiche.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    	case WM_CREATE:
    		hDC = GetDC(hwnd);
    		g_hBitmap = (HBITMAP)LoadImage(NULL,"C:\\icon_web.bmp",IMAGE_BITMAP,0,0,LR_LOADFROMFILE);
    		break;
    	case WM_PAINT:
    		BeginPaint(hwnd,&ps);
    		result = DrawState(hDC,NULL,NULL,(LPARAM)g_hBitmap,0,20,20,0,0,DST_BITMAP);
    		EndPaint(hwnd,&ps);
    		break;

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

Discussions similaires

  1. Affichage d'un bitmap dans la zone client
    Par BigMike dans le forum MFC
    Réponses: 3
    Dernier message: 03/11/2006, 00h34
  2. Réponses: 25
    Dernier message: 27/03/2006, 11h00
  3. Réponses: 4
    Dernier message: 28/02/2006, 14h25
  4. Boite dialogue + Affichage d'un bitmap
    Par gids01 dans le forum MFC
    Réponses: 8
    Dernier message: 23/11/2005, 16h50
  5. Affichage d'une bitmap et de l'heure
    Par nanarr dans le forum Assembleur
    Réponses: 14
    Dernier message: 16/04/2004, 22h39

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