Jump to content
  • Advertisement

Archived

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

Strumpan_

error in my book? Win32 error...

This topic is 5878 days old which is more than the 365 day threshold we allow for new replies. Please post a new topic.

If you intended to correct an error in the post then please contact us.

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

  • Advertisement
×

Important Information

By using GameDev.net, you agree to our community Guidelines, Terms of Use, and Privacy Policy.

We are the game development community.

Whether you are an indie, hobbyist, AAA developer, or just trying to learn, GameDev.net is the place for you to learn, share, and connect with the games industry. Learn more About Us or sign up!

Sign me up!