error in my book? Win32 error...
Hi!
I have some error when I try to compile a project on the CD that came with my BOOK? The Exe file that was already compiled is working but not the code... its a very simple code but if I dont get this cleat I think its usless to coninue...
This is The code:
---------------------------------------------------------
// PROG4_1.CPP - A complete windows program
// INCLUDES ///////////////////////////////////////////////
#define WIN32_LEAN_AND_MEAN
#include <windows.h>
#include <windowsx.h>
#include <stdio.h>
#include <math.h>
// DEFINES ////////////////////////////////////////////////
// defines for windows
#define WINDOW_CLASS_NAME "WINCLASS1"
// GLOBALS ////////////////////////////////////////////////
HWND main_window_handle = NULL; // save the window handle
// FUNCTIONS //////////////////////////////////////////////
LRESULT CALLBACK WindowProc(HWND hwnd,
UINT msg,
WPARAM wparam,
LPARAM lparam)
{
// this is the main message handler of the system
PAINTSTRUCT ps; // used in WM_PAINT
HDC hdc; // handle to a device context
// what is the message
switch(msg)
{
case WM_CREATE:
{
// do initialization stuff here
return(0);
} break;
case WM_PAINT:
{
// simply validate the window
hdc = BeginPaint(hwnd,&ps);
EndPaint(hwnd,&ps);
return(0);
} break;
case WM_DESTROY:
{
// kill the application
PostQuitMessage(0);
return(0);
} break;
default:break;
} // end switch
// process any messages that we didn''t take care of
return (DefWindowProc(hwnd, msg, wparam, lparam));
} // end WinProc
// WINMAIN ////////////////////////////////////////////////
int WINAPI WinMain( HINSTANCE hinstance,
HINSTANCE hprevinstance,
LPSTR lpcmdline,
int ncmdshow)
{
WNDCLASS winclass; // this will hold the class we create
HWND hwnd; // generic window handle
MSG msg; // generic message
// first fill in the window class stucture
winclass.style = CS_DBLCLKS | CS_OWNDC |
CS_HREDRAW | CS_VREDRAW;
winclass.lpfnWndProc = WindowProc;
winclass.cbClsExtra = 0;
winclass.cbWndExtra = 0;
winclass.hInstance = hinstance;
winclass.hIcon = LoadIcon(NULL, IDI_APPLICATION);
winclass.hCursor = LoadCursor(NULL, IDC_ARROW);
winclass.hbrBackground = GetStockObject(BLACK_BRUSH);
winclass.lpszMenuName = NULL;
winclass.lpszClassName = WINDOW_CLASS_NAME;
// register the window class
if (!RegisterClass(&winclass))
return(0);
// create the window
if (!(hwnd = CreateWindow(WINDOW_CLASS_NAME, // class
"Hello Dave", // title
WS_OVERLAPPEDWINDOW | WS_VISIBLE,
0,0, // x,y
320,200, // width, height
NULL, // handle to parent
NULL, // handle to menu
hinstance,// instance
NULL))) // creation parms
return(0);
// save the window handle in a global
main_window_handle = hwnd;
// enter main event loop
while(1)
{
if (PeekMessage(&msg,NULL,0,0,PM_REMOVE))
{
// test if this is a quit
if (msg.message == WM_QUIT)
break;
// translate any accelerator keys
TranslateMessage(&msg);
// send the message to the window proc
DispatchMessage(&msg);
} // end if
// main game processing goes here
} // end while
// return to Windows like this
return(msg.wParam);
} // end WinMain
///////////////////////////////////////////////////////////
--------------------------------------------------------------
Thats just a simple black window and the following error is displayed in my compiler (MSVS 6.0):
--------------------Configuration: PROG4_1 - Win32 Debug--------------------
Compiling...
PROG4_1.CPP
c:\c++\source\gpchap4\prog4_1.cpp(82) : error C2440: ''='' : cannot convert from ''void *'' to ''struct HBRUSH__ *''
Conversion from ''void*'' to pointer to non-''void'' requires an explicit cast
Error executing cl.exe.
PROG4_1.OBJ - 1 error(s), 0 warning(s)
I have n idea please tell me as soon as possible!
Well, I''ve not done any windows programming yet, but I found your problem. apparently the book did have an error, or you left your typecast out.
On this line...
change it to this
This tells the compiler that the Void Pointer returned by GetStockObject is pointing to an object of type HBRUSH. Called Typecasting... I can''t really describe it more than that though. I''m new to all this.
Program does compile and run with above change. good luck!
~~~~~~~~~~~
Chris Vogel
~~~~~~~~~~~
On this line...
winclass.hbrBackground = GetStockObject(BLACK_BRUSH);
change it to this
winclass.hbrBackground = (HBRUSH) GetStockObject(BLACK_BRUSH);
This tells the compiler that the Void Pointer returned by GetStockObject is pointing to an object of type HBRUSH. Called Typecasting... I can''t really describe it more than that though. I''m new to all this.
Program does compile and run with above change. good luck!
~~~~~~~~~~~
Chris Vogel
~~~~~~~~~~~
That was not an error with the book. If you compiled the code in a C compiler, it probably would have worked fine. C++ does not allow you to use a void* without a cast (and HGDIOBJ is just a typedef for void* if I'm not mistaken).
[edited by - SilentCoder on August 16, 2002 7:16:54 PM]
[edited by - SilentCoder on August 16, 2002 7:16:54 PM]
you need the typecast because the function returns a baseclass(HGDIOBJECT), if you look at the documentation for the function youll see it works for a number of objects, and you have to tell it which kind you want back
[edited by - digitec devil on August 16, 2002 6:36:19 PM]
[edited by - digitec devil on August 16, 2002 6:36:19 PM]
if your using visual C++ 6.0 it gets a little picky about typecasting, so the book you''re using is probably a bit older.
I bought it because gamedev is recommending it fow newbies.
Windows Game Programming for Dummies!
Yes its a bit old. around 97 i guess. I also bought Standard C++ Bible really great book
Thanks again guys!
Windows Game Programming for Dummies!
Yes its a bit old. around 97 i guess. I also bought Standard C++ Bible really great book
Thanks again guys!
It's a good book, but it has a lot of code errors. Btw, it isn't the Swedish version, is it?
"I have a cursing flasher."
[edited by - parklife on August 19, 2002 6:30:47 AM]
"I have a cursing flasher."
[edited by - parklife on August 19, 2002 6:30:47 AM]
I think the problem is that while the code works on VC++ 5.0, VC++ 6.0 is stricter (which is a good thing) and forces you to use a cast in such cases.
[ MSVC Fixes | STL | SDL | Game AI | Sockets | C++ Faq Lite | Boost | Asking Questions | Organising code files | My stuff ]
[ MSVC Fixes | STL | SDL | Game AI | Sockets | C++ Faq Lite | Boost | Asking Questions | Organising code files | My stuff ]
This topic is closed to new replies.
Advertisement
Popular Topics
Advertisement