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 :

Afficher une image bitmap


Sujet :

Windows

  1. #1
    Nouveau Candidat au Club
    Inscrit en
    Décembre 2009
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Décembre 2009
    Messages : 10
    Points : 1
    Points
    1
    Par défaut Afficher une image bitmap
    Bonjour ,

    En fait , je travaille sur un projet sur visual studio 2005, et je dois ecrire un programme qui affiche un bitmap ( présent sur mon disque ) ,
    j'ouvre une application "hello world " classique , je joins le squellte du 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
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    // Subproject16.cpp : Defines the entry point for the application.
    //
    
    #include "stdafx.h"
    #include "resource.h"
    
    #define MAX_LOADSTRING 100
    
    // Global Variables:
    HINSTANCE hInst;                      // current instance
    TCHAR szTitle[MAX_LOADSTRING];        // The title bar text
    TCHAR szWindowClass[MAX_LOADSTRING];  // The title bar text
    
    // Forward declarations of functions included in this code module:
    ATOM MyRegisterClass(HINSTANCE hInstance);
    BOOL InitInstance(HINSTANCE, int);
    LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
    
    int WINAPI WinMain(HINSTANCE hInstance,
                         HINSTANCE hPrevInstance,
                         LPTSTR     lpCmdLine,
                         int       nCmdShow)
    {
        // TODO: Place code here.
        MSG msg;
        HACCEL hAccelTable;
    
        // Initialize global strings
        LoadString(hInstance, IDS_APP_TITLE, szTitle, MAX_LOADSTRING);
        LoadString(hInstance, IDC_Subproject16, szWindowClass, MAX_LOADSTRING);
        MyRegisterClass(hInstance);
    
        // Perform application initialization:
        if (!InitInstance (hInstance, nCmdShow)) 
        {
            return FALSE;
        }
    
        hAccelTable = LoadAccelerators(hInstance, (LPCTSTR)IDC_Subproject16);
    
        // Main message loop:
        while (GetMessage(&msg, NULL, 0, 0)) 
        {
            if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg)) 
            {
                TranslateMessage(&msg);
                DispatchMessage(&msg);
            }
        }
    
        return msg.wParam;
    }
    
    
    
    //
    //  FUNCTION: MyRegisterClass()
    //
    //  PURPOSE: Registers the window class.
    //
    //  COMMENTS:
    //
    //    This function and its usage is only necessary if you want this code
    //    to be compatible with Win32 systems prior to the 'RegisterClassEx'
    //    function that was added to Windows 95. It is important to call this function
    //    so that the application will get 'well formed' small icons associated
    //    with it.
    //
    ATOM MyRegisterClass(HINSTANCE hInstance)
    {
        WNDCLASS wc;
    
        wc.style = CS_HREDRAW | CS_VREDRAW;
        wc.lpfnWndProc = (WNDPROC) WndProc;
        wc.cbClsExtra = 0;
        wc.cbWndExtra = 0;
        wc.hInstance = hInstance;
        wc.hIcon = 0;
        wc.hCursor = 0;
        wc.hbrBackground = (HBRUSH) GetStockObject(WHITE_BRUSH);
        wc.lpszMenuName = 0;
        wc.lpszClassName = szWindowClass;
    
        return RegisterClass(&wc);
    }
    
    //
    //   FUNCTION: InitInstance(HANDLE, int)
    //
    //   PURPOSE: Saves instance handle and creates main window
    //
    //   COMMENTS:
    //
    //        In this function, we save the instance handle in a global variable and
    //        create and display the main program window.
    //
    BOOL InitInstance(HINSTANCE hInstance, int nCmdShow)
    {
       HWND hWnd;
    
       hInst = hInstance; // Store instance handle in our global variable
    
       hWnd = CreateWindow(szWindowClass, szTitle, WS_VISIBLE,
          0, 0, CW_USEDEFAULT, CW_USEDEFAULT, NULL, NULL, hInstance, NULL);
    
       if (!hWnd)
       {
          return FALSE;
       }
    
       ShowWindow(hWnd, nCmdShow);
       UpdateWindow(hWnd);
    
       return TRUE;
    }
    
    //
    //  FUNCTION: WndProc(HWND, unsigned, WORD, LONG)
    //
    //  PURPOSE:  Processes messages for the main window.
    //
    //  WM_COMMAND  - process the application menu
    //  WM_PAINT    - Paint the main window
    //  WM_DESTROY  - post a quit message and return
    //
    //
    LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
    {
        PAINTSTRUCT ps;
        HDC hdc;
        TCHAR szHello[MAX_LOADSTRING];
        LoadString(hInst, IDS_HELLO, szHello, MAX_LOADSTRING);
    
        switch (message) 
        {
            case WM_PAINT:
                hdc = BeginPaint(hWnd, &ps);
                // TODO: Add any drawing code here...
                RECT rt;
                GetClientRect(hWnd, &rt);
                DrawText(hdc, szHello, _tcslen(szHello), &rt, DT_CENTER);
                EndPaint(hWnd, &ps);
                break;
            case WM_DESTROY:
                PostQuitMessage(0);
                break;
            default:
                return DefWindowProc(hWnd, message, wParam, lParam);
       }
       return 0;
    }
    Ce code affiche "hello world" dans une interface graphique

    Moi , je doit intégrer a ce code un programme qui affiche une image bitmap,

    je suis débutant et il me faut de l'aide svp .

    mirciii.

  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
    Tu remplaces la fonction WndProc par celle-ci :
    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
    38
    39
    40
    41
    42
    43
    LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
    {
        static HDC hDC;
        PAINTSTRUCT ps;
        
        static HBITMAP hBitmap;
        
        switch(message)
        {
            case WM_CREATE:
            {
                hDC = GetDC(hwnd);
                hBitmap = LoadImage(NULL, TEXT("c:\\image.bmp"), IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE);
                
                break;
            }
            
            case WM_PAINT:
            {
                BeginPaint(hwnd, &ps);
                DrawState(hDC, NULL, NULL, (LPARAM)hBitmap, 0, 20, 20, 0, 0, DST_BITMAP);
                EndPaint(hwnd, &ps);
                
                break;
            }
            
            case WM_DESTROY:
            {
                ReleaseDC(hwnd, hDC);
                DeleteObject(hBitmap);
                PostQuitMessage(0);
                
                break;
            }
            
            default:
            {
                return DefWindowProc(hwnd, message, wParam, lParam);
            }
        }
        
        return 0L;
    }
    Pour utiliser cet exemple, il faut donc bien entendu qu'un fichier nommé c:\image.bmp existe sur ton disque.

  3. #3
    Nouveau Candidat au Club
    Inscrit en
    Décembre 2009
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Décembre 2009
    Messages : 10
    Points : 1
    Points
    1
    Par défaut re question
    Bonjour,

    j'ai fait un simple copier coller de ton programme, après compilation il me sort les erreurs suivantes:

    --> error C2065: 'LR_LOADFROMFILE' : undeclared identifier
    --> error C2065: 'DST_BITMAP' : undeclared identifier
    J'ai du ajouter une bibliothèque CSTDIO.H, et ils ont disparus mais il apparait une autre erreur :

    --> fatal error C1083: Cannot open include file: 'sctdio.h': No such file or directory.
    Je veux aussi des précisions sur l'erreur :
    error C2065: 'DST_BITMAP' : undeclared identifier
    Je sais pas comment procéder.

    Voila le fichier "stdafx.h" :

    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
    // stdafx.h : include file for standard system include files,
    // or project specific include files that are used frequently, but
    // are changed infrequently
    //
    
    #if !defined(AFX_STDAFX_H__A9DB83DB_A9FD_11D0_BFD1_444553540000__INCLUDED_)
    #define AFX_STDAFX_H__A9DB83DB_A9FD_11D0_BFD1_444553540000__INCLUDED_
    
    #if _MSC_VER > 1000
    #pragma once
    #endif // _MSC_VER > 1000
    
    #define WIN32_LEAN_AND_MEAN             // Exclude rarely-used stuff from Windows headers
    
    
    // Windows Header Files:
    #include <windows.h>
    
    // C RunTime Header Files
    #include <stdlib.h>
    #include <malloc.h>
    #include <memory.h>
    #include <tchar.h>
    
    
    // Local Header Files
    
    // TODO: reference additional headers your program requires here
    
    //{{AFX_INSERT_LOCATION}}
    // Microsoft Visual C++ will insert additional declarations immediately before the previous line.
    
    #endif // !defined(AFX_STDAFX_H__A9DB83DB_A9FD_11D0_BFD1_444553540000__INCLUDED_)
    Je veux repréciser que je travaille avec Visual Studio.

    Merci beaucoup pour ton aide .

  4. #4
    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
    upload ton projet complet si tu veux bien (ou poste chacun des fichiers sources et fichiers d'en-tête constituant ton projet mais c'est quand même assez fastidieux).

    cstdio.h, je n'ai jamais entendu parler. Il y a par contre stdio.h en C et cstdio en C++. En plus, un fichier d'en-tête n'est pas une bibliothèque, mais un fichier qui entre dans la constitution d'une bibliothèque.

  5. #5
    Nouveau Candidat au Club
    Inscrit en
    Décembre 2009
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Décembre 2009
    Messages : 10
    Points : 1
    Points
    1
    Par défaut sources du projet
    Bonjour ,

    Je sais que c'est embettant pour toi mais je me sens bloqué , je veux juste un bref explication sur ce projet ( je met ci dessous les fichiers du projets ) .

    Include files :
    1-stdafx.h :

    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
    // stdafx.h : include file for standard system include files,
    //  or project specific include files that are used frequently, but
    //      are changed infrequently
    //
    
    #if !defined(AFX_STDAFX_H__A9DB83DB_A9FD_11D0_BFD1_444553540000__INCLUDED_)
    #define AFX_STDAFX_H__A9DB83DB_A9FD_11D0_BFD1_444553540000__INCLUDED_
    
    #if _MSC_VER > 1000
    #pragma once
    #endif // _MSC_VER > 1000
    
    #define WIN32_LEAN_AND_MEAN             // Exclude rarely-used stuff from Windows headers
    
    
    // Windows Header Files:
    #include <windows.h>
    
    // C RunTime Header Files
    #include <stdlib.h>
    #include <malloc.h>
    #include <memory.h>
    #include <tchar.h>
    
    
    // Local Header Files
    
    // TODO: reference additional headers your program requires here
    
    //{{AFX_INSERT_LOCATION}}
    // Microsoft Visual C++ will insert additional declarations immediately before the previous line.
    
    #endif // !defined(AFX_STDAFX_H__A9DB83DB_A9FD_11D0_BFD1_444553540000__INCLUDED_)

    2- resource.h :

    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
    //{{NO_DEPENDENCIES}}
    // Microsoft Visual C++ generated include file.
    // Used by Subproject16.RC
    //
    #define IDR_MAINFRAME                     128
    #define IDD_Subproject16_DIALOG          102
    #define IDS_APP_TITLE                     103
    #define IDS_HELLO                         106
    #define IDI_Subproject16                 107
    #define IDC_Subproject16                 109
    #define IDC_MYICON                          2
    #define IDC_STATIC                         -1
    // Next default values for new objects
    // 
    #ifdef APSTUDIO_INVOKED
    #ifndef APSTUDIO_READONLY_SYMBOLS
    
    #define _APS_NEXT_RESOURCE_VALUE        129
    #define _APS_NEXT_COMMAND_VALUE         32771
    #define _APS_NEXT_CONTROL_VALUE         1000
    #define _APS_NEXT_SYMED_VALUE           110
    #endif
    #endif
    3- projet.h :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    #if !defined(AFX_SUBPROJECT16_H__C9BA15BF_AEA1_4F59_A3B2_490D5BF1F4BA__INCLUDED_)
    #define AFX_SUBPROJECT16_H__C9BA15BF_AEA1_4F59_A3B2_490D5BF1F4BA__INCLUDED_
    
    #if _MSC_VER > 1000
    #pragma once
    #endif // _MSC_VER > 1000
    
    #include "resource.h"
    
    
    #endif // !defined(AFX_SUBPROJECT16_H__C9BA15BF_AEA1_4F59_A3B2_490D5BF1F4BA__INCLUDED_)

    4- projet.cpp : j'ai remplace le code que tu m'a fourni.

    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
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    // Subproject16.cpp : Defines the entry point for the application.
    //
    
    #include "stdafx.h"
    #include "resource.h"
    #include <sctdio.h>
    #define MAX_LOADSTRING 100
    
    // Global Variables:
    HINSTANCE hInst;                      // current instance
    TCHAR szTitle[MAX_LOADSTRING];        // The title bar text
    TCHAR szWindowClass[MAX_LOADSTRING];  // The title bar text
    
    // Forward declarations of functions included in this code module:
    ATOM MyRegisterClass(HINSTANCE hInstance);
    BOOL InitInstance(HINSTANCE, int);
    LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
    
    int WINAPI WinMain(HINSTANCE hInstance,
                         HINSTANCE hPrevInstance,
                         LPTSTR     lpCmdLine,
                         int       nCmdShow)
    {
        // TODO: Place code here.
        MSG msg;
        HACCEL hAccelTable;
    
        // Initialize global strings
        LoadString(hInstance, IDS_APP_TITLE, szTitle, MAX_LOADSTRING);
        LoadString(hInstance, IDC_Subproject16, szWindowClass, MAX_LOADSTRING);
        MyRegisterClass(hInstance);
    
        // Perform application initialization:
        if (!InitInstance (hInstance, nCmdShow)) 
        {
            return FALSE;
        }
    
        hAccelTable = LoadAccelerators(hInstance, (LPCTSTR)IDC_Subproject16);
    
        // Main message loop:
        while (GetMessage(&msg, NULL, 0, 0)) 
        {
            if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg)) 
            {
                TranslateMessage(&msg);
                DispatchMessage(&msg);
            }
        }
    
        return msg.wParam;
    }
    
    
    
    //
    //  FUNCTION: MyRegisterClass()
    //
    //  PURPOSE: Registers the window class.
    //
    //  COMMENTS:
    //
    //    This function and its usage is only necessary if you want this code
    //    to be compatible with Win32 systems prior to the 'RegisterClassEx'
    //    function that was added to Windows 95. It is important to call this function
    //    so that the application will get 'well formed' small icons associated
    //    with it.
    //
    ATOM MyRegisterClass(HINSTANCE hInstance)
    {
        WNDCLASS wc;
    
        wc.style = CS_HREDRAW | CS_VREDRAW;
        wc.lpfnWndProc = (WNDPROC) WndProc;
        wc.cbClsExtra = 0;
        wc.cbWndExtra = 0;
        wc.hInstance = hInstance;
        wc.hIcon = 0;
        wc.hCursor = 0;
        wc.hbrBackground = (HBRUSH) GetStockObject(WHITE_BRUSH);
        wc.lpszMenuName = 0;
        wc.lpszClassName = szWindowClass;
    
        return RegisterClass(&wc);
    }
    
    //
    //   FUNCTION: InitInstance(HANDLE, int)
    //
    //   PURPOSE: Saves instance handle and creates main window
    //
    //   COMMENTS:
    //
    //        In this function, we save the instance handle in a global variable and
    //        create and display the main program window.
    //
    BOOL InitInstance(HINSTANCE hInstance, int nCmdShow)
    {
       HWND hWnd;
    
       hInst = hInstance; // Store instance handle in our global variable
    
       hWnd = CreateWindow(szWindowClass, szTitle, WS_VISIBLE,
          0, 0, CW_USEDEFAULT, CW_USEDEFAULT, NULL, NULL, hInstance, NULL);
    
       if (!hWnd)
       {
          return FALSE;
       }
    
       ShowWindow(hWnd, nCmdShow);
       UpdateWindow(hWnd);
    
       return TRUE;
    }
    
    //
    //  FUNCTION: WndProc(HWND, unsigned, WORD, LONG)
    //
    //  PURPOSE:  Processes messages for the main window.
    //
    //  WM_COMMAND  - process the application menu
    //  WM_PAINT    - Paint the main window
    //  WM_DESTROY  - post a quit message and return
    //
    //
    LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
    {
        static HDC hDC;
        PAINTSTRUCT ps;
        
        static HBITMAP hBitmap;
        
        switch(message)
        {
            case WM_CREATE:
            {
                hDC = GetDC(hwnd);
                hBitmap = LoadImage(NULL, TEXT("c:\\image.bmp"), IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE);
                
                break;
            }
            
            case WM_PAINT:
            {
                BeginPaint(hwnd, &ps);
                DrawState(hDC, NULL, NULL, (LPARAM)hBitmap, 0, 20, 20, 0, 0, DST_BITMAP);
                EndPaint(hwnd, &ps);
                
                break;
            }
            
            case WM_DESTROY:
            {
                ReleaseDC(hwnd, hDC);
                DeleteObject(hBitmap);
                PostQuitMessage(0);
                
                break;
            }
            
            default:
            {
                return DefWindowProc(hwnd, message, wParam, lParam);
            }
        }
        
        return 0;
    }


    5- stdafx.cpp

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    // stdafx.cpp : source file that includes just the standard includes
    //      Subproject16.pch will be the pre-compiled header
    //      stdafx.obj will contain the pre-compiled type information
    
    #include "stdafx.h"
    
    
    
    // TODO: reference any additional headers you need in STDAFX.H
    // and not in this file


    Merci beaucoup pour tes réponses .

  6. #6
    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
    Dans projet.cpp, enlève la ligne :
    Déjà c'est peut-être de stdio.h que tu veux parler mais de toute façon, on n'a pas besoin de ce fichier ici.
    Recompile. Si tu obtiens toujours des erreurs, enlève la ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    #define WIN32_LEAN_AND_MEAN
    de stdafx.h.
    Qu'est-ce que ça donne ? Désolé je viens de formater ma machine et je n'ai pas encore pu réinstaller Visual.

  7. #7
    Nouveau Candidat au Club
    Inscrit en
    Décembre 2009
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Décembre 2009
    Messages : 10
    Points : 1
    Points
    1
    Par défaut apres compilation
    apres compilation ca donne ces erreurs :

    --> error C2065: 'LR_LOADFROMFILE' : undeclared identifier
    --> error C2065: 'DST_BITMAP' : undeclared identifier
    --> error C3861: 'DrawState': identifier not found .

    j'ai fais des recherches sur google a propos de ces erreurs et j'ai rien trouver d'interessant .

    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
    Là on voit clairement que le problème est que la fonction DrawState (ainsi que les macros qui s'utilisent avec : LR_LOADFROMFILE et DST_BITMAP) n'est pas déclarée. C'est parce que cette fonction n'a été introduite qu'avec Windows 2000 alors que ton projet cible probablement (et je ne sais par quel enchantement car Visual 2005 est censé cibler par défaut minimum Windows XP) une version inférieure. Pour remédier à cela, ajoute dans stdafx.h (n'importe où mais avant l'include de windows.h) la ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    #define _WIN32_WINNT 0x0500

  9. #9
    Nouveau Candidat au Club
    Inscrit en
    Décembre 2009
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Décembre 2009
    Messages : 10
    Points : 1
    Points
    1
    Par défaut source projet
    Bonjour ,

    en fait , je developpe mon projet sous un windowsCE ( de l'embarqué ) et le resultat de mon programme doit s'afficher sur un emulateur , autrement , le programme doit :
    --> Détecter l’insertion d’une Compact Flash (simulée sur l’émulateur)
    --> Ecrire l’application de visualisation des Bitmpas et une possibilite de les effacer .

    Je sais pas est ce a ce niveau la , tu peux m'aider ??

    cordialement .

  10. #10
    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
    en fait , je développe mon projet sous un windowsCE ...
    Alors commence par créer un projet d'application pour Windows CE (Smart Device Application) et non un projet d'application pour Windows 9x/NT comme tu l'as fait. L'API Windows est la même que ce soit sur CE, 9x ou NT à part évidemment certaines fonctionnalités propres à chaque version. En particulier, la gestion des fenêtres et des entrées de l'utilisateur sur CE est assez différente de leur gestion sur 9x/NT. Après pour afficher un bitmap, utilise plutôt bitblt et compagnie à la place de DrawState. Ces fonctions sont très portables sous Windows, c'est-à-dire qu'elles sont disponibles aussi bien sur CE que sur 9x/NT. Je ne suis pas sûr que DrawState existe sur CE. En conclusion, remplace encore la fonction WndProc par celle-ci :
    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
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
    {
        static HDC hDC, hdcMem;
        PAINTSTRUCT ps;
        
        static HBITMAP hBitmap;
        static BITMAP bitmap;
        
        switch(message)
        {
            case WM_CREATE:
            {
                /* Chargement de l'image */
                hBitmap = LoadImage(NULL, TEXT("c:\\image.bmp"), IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE);
                GetObject(hBitmap, sizeof(bitmap), &bitmap);
                
                /* DC de la fenêtre */
                hDC = GetDC(hwnd);
                
                /* DC en mémoire */
                hdcMem = CreateCompatibleDC(hDC);
                SelectObject(hdcMem, hBitmap);
                
                break;
            }
            
            case WM_PAINT:
            {
                BeginPaint(hwnd, &ps);
                BitBlt(hDC, 20, 20, bitmap.bmWidth, bitmap.bmHeight, hdcMem, 0, 0, SRCCOPY);
                EndPaint(hwnd, &ps);
                
                break;
            }
            
            case WM_DESTROY:
            {
                ReleaseDC(hwnd, hDC);
                DeleteDC(hdcMem);
                DeleteObject(hBitmap);
                PostQuitMessage(0);
                
                break;
            }
            
            default:
            {
                return DefWindowProc(hwnd, message, wParam, lParam);
            }
        }
        
        return 0L;
    }

  11. #11
    Nouveau Candidat au Club
    Inscrit en
    Décembre 2009
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Décembre 2009
    Messages : 10
    Points : 1
    Points
    1
    Par défaut re
    apres compilation , il reconnait tjrs pas LR_LOADFROMFILE :

    error C2065: 'LR_LOADFROMFILE' : undeclared identifier .

    cdt,

    je suis desole , je pose tro de question , mais vraiment je me sens bloque a ce niveau la .

  12. #12
    Nouveau Candidat au Club
    Inscrit en
    Décembre 2009
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Décembre 2009
    Messages : 10
    Points : 1
    Points
    1
    Par défaut re
    comme tu a dit , j'ai deja créé un proet WIN CE ,apres j'attache my target (emulateur x86), apre , j'ai créé un sous projet ( subprojest wince -j'ai choisi une application "hello world" que je t'ai envoye son code ) et le but de mon application c'est d'afficher une image BMP et apres faire defiler les images qui sont enregistre sur le disque ) .

    voila en gro le but de mon programme .
    merci

  13. #13
    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
    apres compilation , il reconnait tjrs pas LR_LOADFROMFILE :

    error C2065: 'LR_LOADFROMFILE' : undeclared identifier .
    Tu parles du projet Win 9X/NT ou Win CE ? Dans le premier cas il ne devrait plus avoir cette erreur si tu as déjà bien ajouté la ligne #define _WIN32_WINNT 0x0500.

    N.B. : A chaque modification de code, poste le nouveau code (tous les fichiers).

    comme tu a dit , j'ai deja créé un projet WIN CE ,apres j'attache my target (emulateur x86), apre , j'ai créé un sous projet ( subprojest wince -j'ai choisi une application "hello world" que je t'ai envoye son code ).
    Ce que tu dois faire c'est New Project > Smart Device Application > Win32 Application. Tu nommes le projet ensuite tu choisis la ou les plateformes ciblées, par exemple PocketPC et/ou SmartPhone. Ensuite tu remplaces la WndProc par celle que je t'ai donné.

    et le but de mon application c'est d'afficher une image BMP et apres faire defiler les images qui sont enregistre sur le disque )
    Quel disque ? Celui du PC ? Alors ça va être plus compliqué prévu puisque l'appli ne s'exécute pas sur le PC. Dans quel but tu veux réaliser cette application (commerce, apprentissage, etc.) ? C'est important.

  14. #14
    Nouveau Candidat au Club
    Inscrit en
    Décembre 2009
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Décembre 2009
    Messages : 10
    Points : 1
    Points
    1
    Par défaut re
    bonjour , c'est au niveau de mes etudes que je fais cet application , et je connais pas trop la programmation windows , je suis débutant ,
    Je tenvoi l ennonce de mon projet ,pour avoir une idee .

    cdt ,
    je suis esole une deuxieme fois pour le derangement .
    Images attachées Images attachées

  15. #15
    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
    Ah c'est donc du flash disk connecté à l'appareil que tu parlais, je l'ai complètement oublié.

    Bon, je n'ai pas encore Visual Studio pur le moment, peut-être demain. Mais j'ai quelques questions :

    1. Ton application Hello World fonctionne donc bien sur l'émulateur ? Si oui :
    2. As-tu déjà remplacé la WndProc par la dernière que je t'ai donné ? Si oui :
    3. Monte un flash dans l'émulateur. Remplace "c:\\image.bmp" par le chemin de l'image que tu veux afficher (qui est sur le flash disk virtuel). L'as-tu fais ? Si oui : Ca devrait marcher.

  16. #16
    Nouveau Candidat au Club
    Inscrit en
    Décembre 2009
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Décembre 2009
    Messages : 10
    Points : 1
    Points
    1
    Par défaut
    j'ai fait ce que tu ma dit de faire et jai toujours la meme erreur ,

    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
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    // Subproject16.cpp : Defines the entry point for the application.
    //
    
    #include "stdafx.h"
    #include "resource.h"
    
    #define MAX_LOADSTRING 100
    
    // Global Variables:
    HINSTANCE hInst;                      // current instance
    TCHAR szTitle[MAX_LOADSTRING];        // The title bar text
    TCHAR szWindowClass[MAX_LOADSTRING];  // The title bar text
    
    // Forward declarations of functions included in this code module:
    ATOM MyRegisterClass(HINSTANCE hInstance);
    BOOL InitInstance(HINSTANCE, int);
    LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
    
    int WINAPI WinMain(HINSTANCE hInstance,
                         HINSTANCE hPrevInstance,
                         LPTSTR     lpCmdLine,
                         int       nCmdShow)
    {
        // TODO: Place code here.
        MSG msg;
        HACCEL hAccelTable;
    
        // Initialize global strings
        LoadString(hInstance, IDS_APP_TITLE, szTitle, MAX_LOADSTRING);
        LoadString(hInstance, IDC_Subproject16, szWindowClass, MAX_LOADSTRING);
        MyRegisterClass(hInstance);
    
        // Perform application initialization:
        if (!InitInstance (hInstance, nCmdShow)) 
        {
            return FALSE;
        }
    
        hAccelTable = LoadAccelerators(hInstance, (LPCTSTR)IDC_Subproject16);
    
        // Main message loop:
        while (GetMessage(&msg, NULL, 0, 0)) 
        {
            if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg)) 
            {
                TranslateMessage(&msg);
                DispatchMessage(&msg);
            }
        }
    
        return msg.wParam;
    }
    
    
    
    //
    //  FUNCTION: MyRegisterClass()
    //
    //  PURPOSE: Registers the window class.
    //
    //  COMMENTS:
    //
    //    This function and its usage is only necessary if you want this code
    //    to be compatible with Win32 systems prior to the 'RegisterClassEx'
    //    function that was added to Windows 95. It is important to call this function
    //    so that the application will get 'well formed' small icons associated
    //    with it.
    //
    ATOM MyRegisterClass(HINSTANCE hInstance)
    {
        WNDCLASS wc;
    
        wc.style = CS_HREDRAW | CS_VREDRAW;
        wc.lpfnWndProc = (WNDPROC) WndProc;
        wc.cbClsExtra = 0;
        wc.cbWndExtra = 0;
        wc.hInstance = hInstance;
        wc.hIcon = 0;
        wc.hCursor = 0;
        wc.hbrBackground = (HBRUSH) GetStockObject(WHITE_BRUSH);
        wc.lpszMenuName = 0;
        wc.lpszClassName = szWindowClass;
    
        return RegisterClass(&wc);
    }
    
    //
    //   FUNCTION: InitInstance(HANDLE, int)
    //
    //   PURPOSE: Saves instance handle and creates main window
    //
    //   COMMENTS:
    //
    //        In this function, we save the instance handle in a global variable and
    //        create and display the main program window.
    //
    BOOL InitInstance(HINSTANCE hInstance, int nCmdShow)
    {
       HWND hWnd;
    
       hInst = hInstance; // Store instance handle in our global variable
    
       hWnd = CreateWindow(szWindowClass, szTitle, WS_VISIBLE,
          0, 0, CW_USEDEFAULT, CW_USEDEFAULT, NULL, NULL, hInstance, NULL);
    
       if (!hWnd)
       {
          return FALSE;
       }
    
       ShowWindow(hWnd, nCmdShow);
       UpdateWindow(hWnd);
    
       return TRUE;
    }
    
    //
    //  FUNCTION: WndProc(HWND, unsigned, WORD, LONG)
    //
    //  PURPOSE:  Processes messages for the main window.
    //
    //  WM_COMMAND  - process the application menu
    //  WM_PAINT    - Paint the main window
    //  WM_DESTROY  - post a quit message and return
    //
    //
    LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
    {
        static HDC hDC, hdcMem;
        PAINTSTRUCT ps;
        
        static HBITMAP hBitmap;
        static BITMAP bitmap;
        
        switch(message)
        {
            case WM_CREATE:
            {
                /* Chargement de l'image */
                hBitmap = LoadImage(NULL, TEXT("\storage card"), IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE);
                GetObject(hBitmap, sizeof(bitmap), &bitmap);
                
                /* DC de la fenêtre */
                hDC = GetDC(hwnd);
                
                /* DC en mémoire */
                hdcMem = CreateCompatibleDC(hDC);
                SelectObject(hdcMem, hBitmap);
                
                break;
            }
            
            case WM_PAINT:
            {
                BeginPaint(hwnd, &ps);
                BitBlt(hDC, 20, 20, bitmap.bmWidth, bitmap.bmHeight, hdcMem, 0, 0, SRCCOPY);
                EndPaint(hwnd, &ps);
                
                break;
            }
            
            case WM_DESTROY:
            {
                ReleaseDC(hwnd, hDC);
                DeleteDC(hdcMem);
                DeleteObject(hBitmap);
                PostQuitMessage(0);
                
                break;
            }
            
            default:
            {
                return DefWindowProc(hwnd, message, wParam, lParam);
            }
        }
        
        return 0;
    }
    l erreur :

    error C2065: 'LR_LOADFROMFILE' : undeclared identifier .

    merci .

  17. #17
    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
    Oh oui c'est vrai, désolé. Je pensais que c'était un flag de DrawState alors que c'est un flag de LoadImage. En bouquinant MSDN, on se rend immédiatement compte que la version de LoadImage sur CE est moins flexible que la version sur 9x/NT. Sur CE, pour charger un bitmap depuis un fichier, c'est plutôt SHLoadDIBitmap qu'il faut utiliser. L'appel à LoadImage par : hBitmap = SHLoadDIBitmap(TEXT("chemin-image.bmp"));

  18. #18
    Nouveau Candidat au Club
    Inscrit en
    Décembre 2009
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Décembre 2009
    Messages : 10
    Points : 1
    Points
    1
    Par défaut
    bonjour ,

    ta solution a bien marche , jarrivai a compiler le code et l'executer avec succes ,
    je te remercie beaucoup pour ton aide ,
    est ce possible de faire défiler les images qui existent dans le disk dans l'emulateur ???

    mercii

  19. #19
    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
    Bien sûr. Voici comment énumérer tous les fichiers portant l'extension .bmp du dossier c:\images par exemple :
    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
    #include <stdio.h>
    #include <windows.h>
    #include <tchar.h>
    
    int main()
    {
        HANDLE hEnt;
        WIN32_FIND_DATA ent;
        
        if ((hEnt = FindFirstFile(TEXT("c:\\images\\*.bmp"), &ent)) != INVALID_HANDLE_VALUE)
        {
            do
                _tprintf(_TEXT("%s\n"), ent.cFileName);
            while (FindNextFile(hEnt, &ent));
            
            FindClose(hEnt);
        }
        
        return 0;
    }
    Tu sais déjà comment ouvrir un fichier bitmap puis l'afficher donc t'as déjà tout ce qu'il faut pour bien terminer ton TP.

    Si t'as besoins de cours, il y a :
    http://chgi.developpez.com/windows/
    http://melem.developpez.com/win32/
    Il y a aussi la FAQ Programmation Windows

    Procède par étape au lieu de vouloir tout finir d'un coup.

Discussions similaires

  1. Réponses: 6
    Dernier message: 22/12/2004, 11h00
  2. Réponses: 2
    Dernier message: 04/02/2004, 22h32
  3. generer une image bitmap a partir d'une scene OGL
    Par FreshLog dans le forum OpenGL
    Réponses: 4
    Dernier message: 01/07/2003, 11h29
  4. Afficher une image sans passer par les textures
    Par Black_Daimond dans le forum DirectX
    Réponses: 3
    Dernier message: 09/05/2003, 19h13
  5. Lecture d'une image bitmap
    Par Geronimo dans le forum x86 32-bits / 64-bits
    Réponses: 18
    Dernier message: 28/06/2002, 12h01

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