Thread: Need help with Bitmap Display

Threaded View

Previous Post Previous Post   Next Post Next Post
  1. #1
    VA National Guard The Brain's Avatar
    Join Date
    May 2004
    Location
    Manassas, VA USA
    Posts
    903

    Need help with Bitmap Display

    This code is expanding on the forger's windows programming tutorial; bmp_one (simply displays a static bitmap of a ball on a screen).

    I am attempting to load an array of HBITMAPS (deck[53]) with a bunch of bitmaps of playing cards I scanned earlier today.. and display 5 random cards from the deck onto the main window.

    I can get the code to work if I omit trying to load the deck[53] and just btblt( ) one specific card.

    Can anyone spot the problemo...??

    using codeblocks v8.02

    resource.h
    Code:
    #define ID_2OFSPADES       100
    #define ID_2OFCLUBS        101
    #define ID_2OFHEARTS       102
    #define ID_2OFDIAMONDS     103
    
    #define ID_3OFSPADES       104
    #define ID_3OFCLUBS        105
    #define ID_3OFHEARTS       106
    #define ID_3OFDIAMONDS     107
    
    #define ID_4OFSPADES       108
    #define ID_4OFCLUBS        109
    #define ID_4OFHEARTS       110
    #define ID_4OFDIAMONDS     111
    
    #define ID_5OFSPADES       112
    #define ID_5OFCLUBS        113
    #define ID_5OFHEARTS       114
    #define ID_5OFDIAMONDS     115
    
    #define ID_6OFSPADES       116
    #define ID_6OFCLUBS        117
    #define ID_6OFHEARTS       118
    #define ID_6OFDIAMONDS     119
    
    #define ID_7OFSPADES       120
    #define ID_7OFCLUBS        121
    #define ID_7OFHEARTS       122
    #define ID_7OFDIAMONDS     123
    
    #define ID_8OFSPADES       124
    #define ID_8OFCLUBS        125
    #define ID_8OFHEARTS       126
    #define ID_8OFDIAMONDS     127
    
    #define ID_9OFSPADES       128
    #define ID_9OFCLUBS        129
    #define ID_9OFHEARTS       130
    #define ID_9OFDIAMONDS     131
    
    #define ID_10OFSPADES      132
    #define ID_10OFCLUBS       133
    #define ID_10OFHEARTS      134
    #define ID_10OFDIAMONDS    135
    
    #define ID_JOFSPADES       136
    #define ID_JOFCLUBS        137
    #define ID_JOFHEARTS       138
    #define ID_JOFDIAMONDS     139
    
    #define ID_QOFSPADES       140
    #define ID_QOFCLUBS        141
    #define ID_QOFHEARTS       142
    #define ID_QOFDIAMONDS     143
    
    #define ID_KOFSPADES       144
    #define ID_KOFCLUBS        145
    #define ID_KOFHEARTS       146
    #define ID_KOFDIAMONDS     147
    
    #define ID_AOFSPADES       148
    #define ID_AOFCLUBS        149
    #define ID_AOFHEARTS       150
    #define ID_AOFDIAMONDS     151
    
    #define ID_BACKOFCARD      152

    main.cpp
    Code:
    #include <windows.h>
    #include "resource.h"
    #include <ctime>
    
    const char g_szClassName[] = "myWindowClass";
    
    
    
    LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
    {
    	static HBITMAP deck[53];
            static HBITMAP hbmOld;
    
    	switch(msg)
    	{
    		case WM_CREATE:
                   
                    srand(time(NULL));
    
    		for(int i=0, j=ID_2OFSPADES; i<53; i++, j++)
    		{
                       deck[i] = LoadBitmap(GetModuleHandle(NULL), MAKEINTRESOURCE(j));
    
                        if(deck[i] == NULL)
                        {
                            MessageBox(hwnd, "Could not load cards!", "Error", MB_OK | MB_ICONEXCLAMATION);
                        }
    	 	}
    
    		break;
    		case WM_CLOSE:
    			DestroyWindow(hwnd);
    
    		break;
    		case WM_PAINT:
    		{
    			// Just a note, never use a MessageBox from inside WM_PAINT
    			// The box will cause more WM_PAINT messages and you'll probably end up
    			// stuck in a loop
    
    			BITMAP bm;
    			PAINTSTRUCT ps;
    
    			HDC hdc = BeginPaint(hwnd, &ps);
    
    			HDC hdcMem = CreateCompatibleDC(hdc);
    
    			for (int i=0, j=100; i<5; i++, j+=300)
    			{
                               hbmOld = (HBITMAP)SelectObject(hdcMem, deck[rand()%53]);
    
                                GetObject(deck[i], sizeof(bm), &bm);
    
                                BitBlt(hdc, j, 100, bm.bmWidth, bm.bmHeight, hdcMem, 0, 0, SRCCOPY);
    			}
    
    			SelectObject(hdcMem,hbmOld);
    			DeleteDC(hdcMem);
    
    			EndPaint(hwnd, &ps);
    		}
    		break;
    		case WM_DESTROY:
    
                               for(int i=0; i<53; i++)
                               {
                                   DeleteObject(deck[i]);
                               }
    
    			PostQuitMessage(0);
    		break;
    		default:
    			return DefWindowProc(hwnd, msg, wParam, lParam);
    	}
    	return 0;
    }
    
    int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
    	LPSTR lpCmdLine, int nCmdShow)
    {
    	WNDCLASSEX wc;
    	HWND hwnd;
    	MSG Msg;
    
    	wc.cbSize		 = sizeof(WNDCLASSEX);
    	wc.style		 = 0;
    	wc.lpfnWndProc	 = WndProc;
    	wc.cbClsExtra	 = 0;
    	wc.cbWndExtra	 = 0;
    	wc.hInstance	 = hInstance;
    	wc.hIcon		 = LoadIcon(NULL, IDI_APPLICATION);
    	wc.hCursor		 = LoadCursor(NULL, IDC_ARROW);
    	wc.hbrBackground = (HBRUSH)CreateSolidBrush(RGB(0,255,0));
    	wc.lpszMenuName  = NULL;
    	wc.lpszClassName = g_szClassName;
    	wc.hIconSm		 = LoadIcon(NULL, IDI_APPLICATION);
    
    	if(!RegisterClassEx(&wc))
    	{
    		MessageBox(NULL, "Window Registration Failed!", "Error!",
    			MB_ICONEXCLAMATION | MB_OK);
    		return 0;
    	}
    
    	hwnd = CreateWindowEx(
    		WS_EX_CLIENTEDGE,
    		g_szClassName,
    		"Blackjack v1.0",
    		WS_OVERLAPPEDWINDOW,
    		CW_USEDEFAULT, CW_USEDEFAULT, 900,500,
    		NULL, NULL, hInstance, NULL);
    
    	if(hwnd == NULL)
    	{
    		MessageBox(NULL, "Window Creation Failed!", "Error!",
    			MB_ICONEXCLAMATION | MB_OK);
    		return 0;
    	}
    
    	ShowWindow(hwnd, nCmdShow);
    	UpdateWindow(hwnd);
    
    	while(GetMessage(&Msg, NULL, 0, 0) > 0)
    	{
    		TranslateMessage(&Msg);
    		DispatchMessage(&Msg);
    	}
    	return Msg.wParam;
    }
    resource.rc
    Code:
    #include "resource.h"
    
    ID_2OFSPADES   BITMAP DISCARDABLE "C:\\Users\\Dsve\\Desktop\\Card Bitmaps\\2 of spades.bmp"
    ID_2OFCLUBS    BITMAP DISCARDABLE "C:\\Users\\Dsve\\Desktop\\Card Bitmaps\\2 of clubs.bmp"
    ID_2OFHEARTS   BITMAP DISCARDABLE "C:\\Users\\Dsve\\Desktop\\Card Bitmaps\\2 of hearts.bmp"
    ID_2OFDIAMONDS BITMAP DISCARDABLE "C:\\Users\\Dsve\\Desktop\\Card Bitmaps\\2 of diamonds.bmp"
    
    ID_3OFSPADES   BITMAP DISCARDABLE "C:\\Users\\Dsve\\Desktop\\Card Bitmaps\\3 of spades.bmp"
    ID_3OFCLUBS    BITMAP DISCARDABLE "C:\\Users\\Dsve\\Desktop\\Card Bitmaps\\3 of clubs.bmp"
    ID_3OFHEARTS   BITMAP DISCARDABLE "C:\\Users\\Dsve\\Desktop\\Card Bitmaps\\3 of hearts.bmp"
    ID_3OFDIAMONDS BITMAP DISCARDABLE "C:\\Users\\Dsve\\Desktop\\Card Bitmaps\\3 of diamonds.bmp"
    
    ID_4OFSPADES   BITMAP DISCARDABLE "C:\\Users\\Dsve\\Desktop\\Card Bitmaps\\4 of spades.bmp"
    ID_4OFCLUBS    BITMAP DISCARDABLE "C:\\Users\\Dsve\\Desktop\\Card Bitmaps\\4 of clubs.bmp"
    ID_4OFHEARTS   BITMAP DISCARDABLE "C:\\Users\\Dsve\\Desktop\\Card Bitmaps\\4 of hearts.bmp"
    ID_4OFDIAMONDS BITMAP DISCARDABLE "C:\\Users\\Dsve\\Desktop\\Card Bitmaps\\4 of diamonds.bmp"
    
    ID_5OFSPADES   BITMAP DISCARDABLE "C:\\Users\\Dsve\\Desktop\\Card Bitmaps\\5 of spades.bmp"
    ID_5OFCLUBS    BITMAP DISCARDABLE "C:\\Users\\Dsve\\Desktop\\Card Bitmaps\\5 of clubs.bmp"
    ID_5OFHEARTS   BITMAP DISCARDABLE "C:\\Users\\Dsve\\Desktop\\Card Bitmaps\\5 of hearts.bmp"
    ID_5OFDIAMONDS BITMAP DISCARDABLE "C:\\Users\\Dsve\\Desktop\\Card Bitmaps\\5 of diamonds.bmp"
    
    ID_6OFSPADES   BITMAP DISCARDABLE "C:\\Users\\Dsve\\Desktop\\Card Bitmaps\\6 of spades.bmp"
    ID_6OFCLUBS    BITMAP DISCARDABLE "C:\\Users\\Dsve\\Desktop\\Card Bitmaps\\6 of clubs.bmp"
    ID_6OFHEARTS   BITMAP DISCARDABLE "C:\\Users\\Dsve\\Desktop\\Card Bitmaps\\6 of hearts.bmp"
    ID_6OFDIAMONDS BITMAP DISCARDABLE "C:\\Users\\Dsve\\Desktop\\Card Bitmaps\\6 of diamonds.bmp"
    
    ID_7OFSPADES   BITMAP DISCARDABLE "C:\\Users\\Dsve\\Desktop\\Card Bitmaps\\7 of spades.bmp"
    ID_7OFCLUBS    BITMAP DISCARDABLE "C:\\Users\\Dsve\\Desktop\\Card Bitmaps\\7 of clubs.bmp"
    ID_7OFHEARTS   BITMAP DISCARDABLE "C:\\Users\\Dsve\\Desktop\\Card Bitmaps\\7 of hearts.bmp"
    ID_7OFDIAMONDS BITMAP DISCARDABLE "C:\\Users\\Dsve\\Desktop\\Card Bitmaps\\7 of diamonds.bmp"
    
    ID_8OFSPADES   BITMAP DISCARDABLE "C:\\Users\\Dsve\\Desktop\\Card Bitmaps\\8 of spades.bmp"
    ID_8OFCLUBS    BITMAP DISCARDABLE "C:\\Users\\Dsve\\Desktop\\Card Bitmaps\\8 of clubs.bmp"
    ID_8OFHEARTS   BITMAP DISCARDABLE "C:\\Users\\Dsve\\Desktop\\Card Bitmaps\\8 of hearts.bmp"
    ID_8OFDIAMONDS BITMAP DISCARDABLE "C:\\Users\\Dsve\\Desktop\\Card Bitmaps\\8 of diamonds.bmp"
    
    ID_9OFSPADES   BITMAP DISCARDABLE "C:\\Users\\Dsve\\Desktop\\Card Bitmaps\\9 of spades.bmp"
    ID_9OFCLUBS    BITMAP DISCARDABLE "C:\\Users\\Dsve\\Desktop\\Card Bitmaps\\9 of clubs.bmp"
    ID_9OFHEARTS   BITMAP DISCARDABLE "C:\\Users\\Dsve\\Desktop\\Card Bitmaps\\9 of hearts.bmp"
    ID_9OFDIAMONDS BITMAP DISCARDABLE "C:\\Users\\Dsve\\Desktop\\Card Bitmaps\\9 of diamonds.bmp"
    
    ID_10OFSPADES  BITMAP DISCARDABLE "C:\\Users\\Dsve\\Desktop\\Card Bitmaps\\10 of spades.bmp"
    ID_10OFCLUBS   BITMAP DISCARDABLE "C:\\Users\\Dsve\\Desktop\\Card Bitmaps\\10 of clubs.bmp"
    ID_10OFHEARTS  BITMAP DISCARDABLE "C:\\Users\\Dsve\\Desktop\\Card Bitmaps\\10 of hearts.bmp"
    ID_10OFDIAMONDS    BITMAP DISCARDABLE "C:\\Users\\Dsve\\Desktop\\Card Bitmaps\\10 of diamonds.bmp"
    
    ID_JOFSPADES   BITMAP DISCARDABLE "C:\\Users\\Dsve\\Desktop\\Card Bitmaps\\jack of spades.bmp"
    ID_JOFCLUBS    BITMAP DISCARDABLE "C:\\Users\\Dsve\\Desktop\\Card Bitmaps\\jack of clubs.bmp"
    ID_JOFHEARTS   BITMAP DISCARDABLE "C:\\Users\\Dsve\\Desktop\\Card Bitmaps\\jack of hearts.bmp"
    ID_JOFDIAMONDS BITMAP DISCARDABLE "C:\\Users\\Dsve\\Desktop\\Card Bitmaps\\jack of diamonds.bmp"
    
    ID_QOFSPADES   BITMAP DISCARDABLE "C:\\Users\\Dsve\\Desktop\\Card Bitmaps\\queen of spades.bmp"
    ID_QOFCLUBS    BITMAP DISCARDABLE "C:\\Users\\Dsve\\Desktop\\Card Bitmaps\\queen of clubs.bmp"
    ID_QOFHEARTS   BITMAP DISCARDABLE "C:\\Users\\Dsve\\Desktop\\Card Bitmaps\\queen of hearts.bmp"
    ID_QOFDIAMONDS     BITMAP DISCARDABLE "C:\\Users\\Dsve\\Desktop\\Card Bitmaps\\queen of diamonds.bmp"
    
    ID_KOFSPADES   BITMAP DISCARDABLE "C:\\Users\\Dsve\\Desktop\\Card Bitmaps\\king of spades.bmp"
    ID_KOFCLUBS    BITMAP DISCARDABLE "C:\\Users\\Dsve\\Desktop\\Card Bitmaps\\king of clubs.bmp"
    ID_KOFHEARTS   BITMAP DISCARDABLE "C:\\Users\\Dsve\\Desktop\\Card Bitmaps\\king of hearts.bmp"
    ID_KOFDIAMONDS BITMAP DISCARDABLE "C:\\Users\\Dsve\\Desktop\\Card Bitmaps\\king of diamonds.bmp"
    
    ID_AOFSPADES   BITMAP DISCARDABLE "C:\\Users\\Dsve\\Desktop\\Card Bitmaps\\ace of spades.bmp"
    ID_AOFCLUBS    BITMAP DISCARDABLE "C:\\Users\\Dsve\\Desktop\\Card Bitmaps\\ace of clubs.bmp"
    ID_AOFHEARTS   BITMAP DISCARDABLE "C:\\Users\\Dsve\\Desktop\\Card Bitmaps\\ace of hearts.bmp"
    
    ID_BACKOFCARD  BITMAP DISCARDABLE "C:\\Users\\Dsve\\Desktop\\Card Bitmaps\\back of card.bmp"
    Last edited by The Brain; 03-21-2009 at 07:25 AM.
    • "Problem Solving C++, The Object of Programming" -Walter Savitch
    • "Data Structures and Other Objects using C++" -Walter Savitch
    • "Assembly Language for Intel-Based Computers" -Kip Irvine
    • "Programming Windows, 5th edition" -Charles Petzold
    • "Visual C++ MFC Programming by Example" -John E. Swanke
    • "Network Programming Windows" -Jones/Ohlund
    • "Sams Teach Yourself Game Programming in 24 Hours" -Michael Morrison
    • "Mathmatics for 3D Game Programming & Computer Graphics" -Eric Lengyel

Popular pages Recent additions subscribe to a feed

Similar Threads

  1. OpenGL -- Bitmaps
    By HQSneaker in forum Game Programming
    Replies: 14
    Last Post: 09-06-2004, 04:04 PM
  2. Simple Ddraw question. Display bitmap on a screen.
    By tegwin in forum Game Programming
    Replies: 0
    Last Post: 05-22-2004, 05:50 PM
  3. How to create and display a bitmap programatically?
    By solar3147 in forum Windows Programming
    Replies: 4
    Last Post: 06-24-2003, 02:55 AM
  4. bitmap not going onto screen
    By stallion in forum Windows Programming
    Replies: 4
    Last Post: 02-22-2003, 10:07 AM
  5. Using BitBlt() to display only a portion of a big bitmap
    By Leeman_s in forum Windows Programming
    Replies: 4
    Last Post: 01-16-2003, 10:09 PM