Skip to main content
gamedev.net
🔒 Locked

CreateWindowEx

Started by Mattman Jan 22, 2003 at 3:19 PM 1 replies 600+ views
Original Post
Mattman
Mattman
I can''t seem to solve this problem with the application I''m developing. When testing the return value of CreateWindowEx, it returns FALSE (well, !CreateWindowEx(...) returns TRUE, that is). Anyway, I test the error using GetLastError(), and the error message is "The operation completed successfully." Why is an error occurring here if it seems that there is no error? I think I had a similar (if not the same) problem before, and I think it had to do with the return values from the WinProc function, but I can''t remember what the problem was. The following is my code. Thanks for the help!
HINSTANCE hInst;
HWND hWnd;



HRESULT MakeWindow(HINSTANCE, UINT, UINT);
LRESULT CALLBACK WinProc(HWND, UINT, WPARAM, LPARAM);



HRESULT MakeWindow(HINSTANCE hInstance, UINT nWidth, UINT nHeight)
{
	WNDCLASSEX window;
	
 	// Create the window''s class.
	window.cbSize           = sizeof(WNDCLASSEX);
	window.style			= CS_OWNDC | CS_HREDRAW | CS_VREDRAW;	// CS_DBLCLKS
	window.lpfnWndProc	    = WinProc;
	window.cbClsExtra		= 0;
	window.cbWndExtra		= 0;
	window.hInstance		= hInstance;
	window.hIcon			= LoadIcon(NULL, IDI_APPLICATION);
	window.hCursor			= LoadCursor(NULL, IDC_ARROW);
	window.hbrBackground	= (HBRUSH) GetStockObject(BLACK_BRUSH);
	window.lpszMenuName		= NULL;
	window.lpszClassName	= WNDCLS_NAME;
	window.hIconSm			= LoadIcon(NULL, IDI_APPLICATION);
	
	// Register the window''s class.
	if (!RegisterClassEx(&window))
		return (E_FAIL);
	
	// Create a window based upon the window class settings.
	if (!(hWnd = CreateWindowEx(WS_EX_TOPMOST,
								WNDCLS_NAME,
								"The Game of all Games",
								WS_POPUP | WS_VISIBLE,
								0, 0, nWidth, nHeight,
								NULL,
								NULL,
								hInstance,
								NULL)))
	{
		LPVOID lpMsgBuf;
		FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM |
					  FORMAT_MESSAGE_IGNORE_INSERTS,
					  NULL,
					  GetLastError(),
					  0, // Default language
					  (LPTSTR) &lpMsgBuf,
					  0,
					  NULL);
		// Display the string.
		MessageBox(NULL, (LPCTSTR) lpMsgBuf, "Error", MB_OK | MB_ICONINFORMATION);
		// Free the buffer.
		LocalFree(lpMsgBuf);
		return (E_FAIL);
	}
	
	// Inform parent function that this function completed properly.
	return(S_OK);
}



int APIENTRY WinMain(HINSTANCE hInstance,
                     HINSTANCE hPrevInstance,
                     LPSTR     lpCmdLine,
                     int       nCmdShow)
{
	MSG msg;
	BOOL bRet;
	
//	DialogBox(hInstance, (LPCTSTR)IDD_MAIN, NULL, (DLGPROC)WndMain);
//	DialogBox(hInstance, MAKEINTRESOURCE(IDD_MAIN), NULL, (DLGPROC)WndMain);
	
	if (FAILED(MakeWindow(hInstance, 640, 480)))
		return 0;
	
/*	// Initialize Window Class.
	if (!RegWndClass(hInstance))
	{
		MessageBox(NULL, "Error registering Window Class.", "Error", NULL);
		return FALSE;
	}
	
	// Perform application initialization.
	if (!InitInstance(hInstance, nCmdShow))
	{
		MessageBox(NULL, "Error creating application window.", "Error", NULL);
		return FALSE;
	}*/
	
	MessageBox(NULL, "IT WORKS (#1)", "IT WORKS", NULL);
	
	// Main message loop:
	while ((bRet = GetMessage(&msg, NULL, 0, 0)) != 0) 
	{
		if (bRet == -1)
		{
			// Handle Error and exit.
			MessageBox(NULL, "Unexpected error.", "Error", NULL);
			PostQuitMessage(FALSE);
			return FALSE;
		}
		else
		{
			TranslateMessage(&msg);
			DispatchMessage(&msg);
		}
	}
	
	MessageBox(NULL, "IT WORKS (#2)", "IT WORKS", NULL);
	
	// Unregister the class from memory.
	UnregisterClass(WNDCLS_NAME, hInstance);
	
	return msg.wParam;
}



LRESULT CALLBACK WinProc(HWND hDlg, UINT msg, WPARAM wParam, LPARAM lParam)
{
	int wmId, wmEvent;
	
	switch (msg) 
	{
		case WM_DESTROY:
			PostQuitMessage(0);
			break;
		default:
			return DefWindowProc(hWnd, msg, wParam, lParam);
	}
	return DefWindowProc(hWnd, msg, wParam, lParam);
}
Mattman
Mattman
HAH, whoops...thanks a lot, it works now

Topic Locked

This topic has been locked by a moderator. New replies are not allowed.

Sign in to reply to this topic.