Creating Windows, newbie question
Hi ppl,my first time posting in thsi forum! well, I just started to learn to program (bought Tricks for windows game....) for windows and i have a question. how would i change this program so that if I close only one window, the whole program won't quit and it will only quit if i close both windows. Hope this comes out right... *crosses fingers*
// INCLUDES ////////////////////////////////////
#define WIN32_LEAN_AND_MEAN //no MFC
#include
#include
#include
#include
// DEFINES /////////////////////////////////////
// define for windows
#define WINDOW_CLASS_NAME "WINCLASS1"
#define WINDOW_CLASS_NAME2 "WINCLASS2"
// GLOBALS /////////////////////////////////////
// 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 success
return(0);
} break;
case WM_PAINT:
{
// simply validate the window
hdc = BeginPaint(hwnd,&ps);
// you would do all your painting here
EndPaint(hwnd,&ps);
// return success
return (0);
} break;
case WM_DESTROY:
{
// kill the application, this sends a WM_QUIT message
PostQuitMessage(0);
// return success
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)
{
WNDCLASSEX winclass, winclass2; // this will hold the class we create
HWND hwnd; // generic window handle
MSG msg; // generic message
// first fill in the window class structure
winclass.cbSize = sizeof(WNDCLASSEX);
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 = (HBRUSH)GetStockObject(BLACK_BRUSH);
winclass.lpszMenuName = NULL;
winclass.lpszClassName = WINDOW_CLASS_NAME;
winclass.hIconSm = LoadIcon(NULL, IDI_APPLICATION);
// fill in the window class 2 structure
winclass2.cbSize = sizeof(WNDCLASSEX);
winclass2.style = CS_DBLCLKS | CS_OWNDC | CS_HREDRAW | CS_VREDRAW;
winclass2.lpfnWndProc = WindowProc;
winclass2.cbClsExtra = 0;
winclass2.cbWndExtra = 0;
winclass2.hInstance = hinstance;
winclass2.hIcon = LoadIcon(NULL, IDI_APPLICATION);
winclass2.hCursor = LoadCursor(NULL, IDC_ARROW);
winclass2.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);
winclass2.lpszMenuName = NULL;
winclass2.lpszClassName = WINDOW_CLASS_NAME2;
winclass2.hIconSm = LoadIcon(NULL, IDI_APPLICATION);
// register the window class
if (!RegisterClassEx(&winclass))
return(0);
if (!RegisterClassEx(&winclass2))
return(0);
// create the window
if (!(hwnd = CreateWindowEx(NULL, // extended style
WINDOW_CLASS_NAME, // class
"Window 1 based on WINCLASS1", // title
WS_OVERLAPPEDWINDOW | WS_VISIBLE,
0,0, // initial x,y
400,400, // initial width, height
NULL, // handle to parent
NULL, // handle to menu
hinstance, //instance of this application
NULL))) // extra creation parms
return(0);
// create the second window
if (!(hwnd = CreateWindowEx(NULL,
WINDOW_CLASS_NAME2,
"Window 2 based on WINCLASS2",
WS_OVERLAPPEDWINDOW | WS_VISIBLE,
100,100,
400,400,
NULL,
NULL,
hinstance,
NULL)))
return(0);
// enter main event loop
while(TRUE)
{
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
} // end while
return(msg.wParam);
} // end WinMain
Edit: errrr....dang, what happened to my paragraphing!?!?! Hope it's not that hard to read. -_-;
Edited by - Taralieth on January 1, 2002 12:50:26 PM
Edited by - Taralieth on January 1, 2002 12:51:28 PM
Well there are two things that come to mind you could do.
The first is assign one window to be the "main" window. This would be nice if you want one to close and the other to remain open, but if the "main" window is closed, the app shuts down. This is done by checking the handle of the window passed to the callback function to determine which window is asking to be closed. You can then decide whether to close the window and continue or close down the app.
The second solution would be able to close either window without consequence. To do this you could simply check on the state of the other window when one is asked to close. If the other window is closed as well, then the whole app terminates.
I wish i could show you some code, but I haven''t touched win32 in almost a year I''ve been writing so much and doing other stuff. Hell I''m just starting to get back into C++!! Hopefully others can help there.
_________________________________________________________________
Drew Sikora
A.K.A. Gaiiden
ICQ #: 70449988
AOLIM: DarkPylat
Blade Edge Software
Staff Member, GDNet
Public Relations, Game Institute
3-time Contributing author, Game Design Methods , Charles River Media (coming GDC 2002)
Online column - Design Corner at Pixelate
NJ IGDA Chapter - NJ developers unite!! [Chapter Home | Chapter Forum]
The first is assign one window to be the "main" window. This would be nice if you want one to close and the other to remain open, but if the "main" window is closed, the app shuts down. This is done by checking the handle of the window passed to the callback function to determine which window is asking to be closed. You can then decide whether to close the window and continue or close down the app.
The second solution would be able to close either window without consequence. To do this you could simply check on the state of the other window when one is asked to close. If the other window is closed as well, then the whole app terminates.
I wish i could show you some code, but I haven''t touched win32 in almost a year I''ve been writing so much and doing other stuff. Hell I''m just starting to get back into C++!! Hopefully others can help there.
_________________________________________________________________
Drew Sikora
A.K.A. Gaiiden
ICQ #: 70449988
AOLIM: DarkPylat
Blade Edge Software
Staff Member, GDNet
Public Relations, Game Institute
3-time Contributing author, Game Design Methods , Charles River Media (coming GDC 2002)
Online column - Design Corner at Pixelate
NJ IGDA Chapter - NJ developers unite!! [Chapter Home | Chapter Forum]
OK, I'll try:
-In your globals variables add:
int createdWindows = 0;
- Every time you create a window:
createdWindows++;
-Inside WindowProc:
Let me know if I undestood the question and if I helped!
Anyway, shouldn't you have another HWND for the second windows?
SKeTch
Edited by - sketchturner on January 1, 2002 3:22:17 PM
Edited by - sketchturner on January 1, 2002 3:22:43 PM
-In your globals variables add:
int createdWindows = 0;
- Every time you create a window:
createdWindows++;
-Inside WindowProc:
case WM_DESTROY:createdWindows--;if(createdWindows == 0) PostQuitMessage(0);
Let me know if I undestood the question and if I helped!
Anyway, shouldn't you have another HWND for the second windows?
SKeTch
Edited by - sketchturner on January 1, 2002 3:22:17 PM
Edited by - sketchturner on January 1, 2002 3:22:43 PM
quote:Original post by silent_whisper
a little bump because i am having a similar problem.
Um, it was answered. Rather than bumping, why don''t you read?
This topic is closed to new replies.
Advertisement
Popular Topics
Advertisement