//////////////////////////////////////////////////////////////////////////
// BaseWindow.h: Abstract window class.
//
// Note: This class is designed to be as minimal as possible for
// purposes of a sample Win32 application. It is not meant to be
// a complete solution along the lines of MFC or ATL.
// 
// THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF
// ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO
// THE IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A
// PARTICULAR PURPOSE.
//
// Copyright (c) Microsoft Corporation. All rights reserved.
//
//////////////////////////////////////////////////////////////////////////

#pragma once


class BaseWindow
{
public:

	BaseWindow();
	virtual ~BaseWindow() {}

	static LRESULT CALLBACK	WindowProc(HWND, UINT, WPARAM, LPARAM);

	HRESULT Create(HINSTANCE hInstance);
	HRESULT Show(int nCmdShow);

	virtual LRESULT OnReceiveMessage(UINT msg, WPARAM wparam, LPARAM lparam);

protected:

	HRESULT Register();

	virtual LPCTSTR ClassName() const = 0;
	virtual LPCTSTR MenuName() const { return NULL; }
	virtual LPCTSTR WindowName() const = 0;

	virtual void OnPaint() = 0;


	HWND		m_hwnd;
	HINSTANCE	m_hInstance;

};