Thread: DX9 Not Displaying Bitmaps

Threaded View

Previous Post Previous Post   Next Post Next Post
  1. #1
    For Narnia! Sentral's Avatar
    Join Date
    May 2005
    Location
    Narnia
    Posts
    719

    DX9 Not Displaying Bitmaps

    I am reading a book called "Begining Game Programming", and I got to the part where you start displaying bitmaps through the use of a game loop. It comes with a CD so I took the source code from their and put it into my compiler MSVC 7.1. It says to save it with a .c extension not a .cpp (I dont know if this matters). So I save it with a .c . I put the bitmap in my resource folder in the solution explorer, and then put the code in (pasted) When I run it, it comes up with the window, but no bitmaps. Anyone know why this is?
    Code:
    // Beginning Game Programming
    // Chapter 4
    // GameLoop project
    
    #include <windows.h>
    #include <winuser.h>
    #include <stdio.h>
    #include <stdlib.h>
    #include <time.h>
    
    #define APPTITLE "Game Loop"
    
    //function prototypes
    LRESULT CALLBACK WinProc(HWND,UINT,WPARAM,LPARAM);
    ATOM MyRegisterClass(HINSTANCE);
    BOOL InitInstance(HINSTANCE,int);
    void DrawBitmap(HDC,char*,int,int);
    void Game_Init();
    void Game_Run();
    void Game_End();
    
    
    //local variables
    HWND global_hwnd;
    HDC global_hdc;
    
    
    //the window event callback function
    LRESULT CALLBACK WinProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
    {
        global_hwnd = hWnd;
        global_hdc = GetDC(hWnd);
    
    	switch (message) 
    	{
    		case WM_DESTROY:
                Game_End();
    			PostQuitMessage(0);
    			break;
        }
    	return DefWindowProc(hWnd, message, wParam, lParam);
    }
    
    //helper function to set up the window properties
    ATOM MyRegisterClass(HINSTANCE hInstance)
    {
        //create the window class structure
        WNDCLASSEX wc;
        wc.cbSize = sizeof(WNDCLASSEX); 
    
        //fill the struct with info
        wc.style         = CS_HREDRAW | CS_VREDRAW;
        wc.lpfnWndProc   = (WNDPROC)WinProc;
        wc.cbClsExtra	 = 0;
        wc.cbWndExtra	 = 0;
        wc.hInstance     = hInstance;
        wc.hIcon         = NULL;
        wc.hCursor       = LoadCursor(NULL, IDC_ARROW);
        wc.hbrBackground = (HBRUSH)GetStockObject(BLACK_BRUSH);
        wc.lpszMenuName  = NULL;
        wc.lpszClassName = APPTITLE;
        wc.hIconSm       = NULL;
    
        //set up the window with the class info
        return RegisterClassEx(&wc);
    
    }
    
    //helper function to create the window and refresh it
    BOOL InitInstance(HINSTANCE hInstance, int nCmdShow)
    {
        HWND hWnd;
    
        //create a new window
        hWnd = CreateWindow(
           APPTITLE,              //window class
           APPTITLE,              //title bar
           WS_OVERLAPPEDWINDOW,   //window style
           CW_USEDEFAULT,         //x position of window
           CW_USEDEFAULT,         //y position of window
           500,                   //width of the window
           400,                   //height of the window
    	   NULL,                  //parent window
           NULL,                  //menu
           hInstance,             //application instance
           NULL);                 //window parameters
    
        //was there an error creating the window?
        if (!hWnd)
          return FALSE;
    
        //display the window
        ShowWindow(hWnd, nCmdShow);
        UpdateWindow(hWnd);
    
        return TRUE;
    }
    
    
    //entry point for a Windows program
    int WINAPI WinMain(HINSTANCE hInstance,
                       HINSTANCE hPrevInstance,
                       LPSTR     lpCmdLine,
                       int       nCmdShow)
    {
        int done = 0;
    	MSG msg;
    
    	// register the class
    	MyRegisterClass(hInstance);
    
    
        // initialize application
    	if (!InitInstance (hInstance, nCmdShow)) 
    		return FALSE;
    
        //initialize the game
        Game_Init();
    
        // main message loop
    	while (!done)
    	{
            if (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE)) 
            {
                //look for quit message
                if (msg.message == WM_QUIT)
                    done = 1;
    
                //decode and pass messages on to WndProc
                TranslateMessage(&msg);
    		    DispatchMessage(&msg);
            }
            
            //process game loop
            Game_Run();
    	}
    
    	return msg.wParam;
    }
    
    void DrawBitmap(HDC hdcDest, char *filename, int x, int y)
    {
        HBITMAP image;
        BITMAP bm;
    	HDC hdcMem;
    
        //load the bitmap image
        image = LoadImage(0,"c.bmp",IMAGE_BITMAP,0,0,LR_LOADFROMFILE);
    
        //read the bitmap's properties
        GetObject(image, sizeof(BITMAP), &bm);
    
        //create a device context for the bitmap
        hdcMem = CreateCompatibleDC(global_hdc);
    	SelectObject(hdcMem, image);
    
        //draw the bitmap to the window (bit block transfer)
        BitBlt( 
            global_hdc,              //destination device context
            x, y,                    //x,y location on destination
            bm.bmWidth, bm.bmHeight, //width,height of source bitmap
    	    hdcMem,                  //source bitmap device context
            0, 0,                    //start x,y on source bitmap
            SRCCOPY);                //blit method
    
        //delete the device context and bitmap
        DeleteDC(hdcMem);
        DeleteObject((HBITMAP)image);
    }
    
    
    void Game_Init()
    {
        //initialize the game...
        //load bitmaps, meshes, textures, sounds, etc.
    
        srand(time(NULL));
    }
    
    void Game_Run()
    {
        //this is called once every frame
        //do not include your own loop here!
        
        int x = 0, y = 0;
        RECT rect;
        GetClientRect(global_hwnd, &rect);
    
        if (rect.right > 0)
        {
            x = rand() % (rect.right - rect.left);
            y = rand() % (rect.bottom - rect.top);
            DrawBitmap(global_hdc, "c.bmp", x, y);
        }
    }
    
    void Game_End()
    {
    
    }
    EDIT- LOL! I got it now, it was an incorrect path to the .bmp, i created one from inside the IDE and now it works. Peace.
    Last edited by Sentral; 01-28-2006 at 12:41 PM.

Popular pages Recent additions subscribe to a feed

Similar Threads

  1. Drawing bitmaps efficiently
    By scwizzo in forum Windows Programming
    Replies: 28
    Last Post: 06-30-2009, 08:25 PM
  2. Problem displaying bitmaps
    By batman123 in forum Game Programming
    Replies: 2
    Last Post: 01-09-2005, 02:01 AM
  3. Bitmaps Not Displaying
    By DCII764II00 in forum Windows Programming
    Replies: 3
    Last Post: 05-25-2004, 03:14 PM
  4. Displaying Two BitMaps
    By kryptkat in forum Windows Programming
    Replies: 2
    Last Post: 12-24-2002, 08:15 PM
  5. Displaying bitmaps on a dialog
    By minesweeper in forum Windows Programming
    Replies: 2
    Last Post: 05-15-2002, 03:11 PM