Archived

This topic is now archived and is closed to further replies.

Strumpan_

error in my book? Win32 error...

Recommended Posts

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!

Share this post


Link to post
Share on other sites
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...


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
~~~~~~~~~~~

Share this post


Link to post
Share on other sites
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]

Share this post


Link to post
Share on other sites
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]

Share this post


Link to post
Share on other sites
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!

Share this post


Link to post
Share on other sites
parklife: your ''cursing flasher'' not only gives a 404 (at least the link you gave does) but also the incorrect value for pi:

You have:
31415926538

Should be:
3.1415926535

Share this post


Link to post
Share on other sites
Guest Anonymous Poster
quote:
Original post by evil sausage
In the the book he clearly says that on some compilers you''ll need to add "(HBRUSH)" to that line.So it wasn''t an error.


Well, if he''d simply put the cast in his code, it would have worked on ALL compilers, and he wouldn''t have to have that line at all. And there wouldn''t be confused people asking what''s wrong. So, I would say it was definitely an error, at least in Andre''s judgement.

Share this post


Link to post
Share on other sites