1706f2543Smrg/* 2706f2543Smrg * Copyright (c) 2005 Alexander Gottwald 3706f2543Smrg * 4706f2543Smrg * Permission is hereby granted, free of charge, to any person obtaining a 5706f2543Smrg * copy of this software and associated documentation files (the "Software"), 6706f2543Smrg * to deal in the Software without restriction, including without limitation 7706f2543Smrg * the rights to use, copy, modify, merge, publish, distribute, sublicense, 8706f2543Smrg * and/or sell copies of the Software, and to permit persons to whom the 9706f2543Smrg * Software is furnished to do so, subject to the following conditions: 10706f2543Smrg * 11706f2543Smrg * The above copyright notice and this permission notice shall be included in 12706f2543Smrg * all copies or substantial portions of the Software. 13706f2543Smrg * 14706f2543Smrg * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 15706f2543Smrg * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 16706f2543Smrg * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 17706f2543Smrg * THE ABOVE LISTED COPYRIGHT HOLDER(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR 18706f2543Smrg * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, 19706f2543Smrg * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 20706f2543Smrg * DEALINGS IN THE SOFTWARE. 21706f2543Smrg * 22706f2543Smrg * Except as contained in this notice, the name(s) of the above copyright 23706f2543Smrg * holders shall not be used in advertising or otherwise to promote the sale, 24706f2543Smrg * use or other dealings in this Software without prior written authorization. 25706f2543Smrg */ 26706f2543Smrg#ifndef __WINDOW_H__ 27706f2543Smrg#define __WINDOW_H__ 28706f2543Smrg 29706f2543Smrg#include <windows.h> 30706f2543Smrg#include <string> 31706f2543Smrg 32706f2543Smrgclass CDialog; 33706f2543Smrgclass CWindow 34706f2543Smrg{ 35706f2543Smrg friend class CDialog; 36706f2543Smrg public: 37706f2543Smrg struct CBoundary 38706f2543Smrg { 39706f2543Smrg int left; 40706f2543Smrg int top; 41706f2543Smrg int width; 42706f2543Smrg int height; 43706f2543Smrg CBoundary() : 44706f2543Smrg left(0), top(0), width(0), height(0) {}; 45706f2543Smrg CBoundary(int x, int y, int w, int h) : 46706f2543Smrg left(x), top(y), width(w), height(h) {}; 47706f2543Smrg CBoundary(const RECT &r) : 48706f2543Smrg left(r.left), top(r.top), width(r.right-r.left), height(r.bottom-r.top) {}; 49706f2543Smrg }; 50706f2543Smrg class CWindowClass 51706f2543Smrg { 52706f2543Smrg private: 53706f2543Smrg WNDPROC wndproc; 54706f2543Smrg ATOM atom; 55706f2543Smrg std::string classname; 56706f2543Smrg protected: 57706f2543Smrg void Register(); 58706f2543Smrg public: 59706f2543Smrg CWindowClass(const char *name, WNDPROC wndproc); 60706f2543Smrg ~CWindowClass(); 61706f2543Smrg const char *GetClassName() { return classname.c_str(); }; 62706f2543Smrg }; 63706f2543Smrg private: 64706f2543Smrg static CWindowClass windowClass; 65706f2543Smrg 66706f2543Smrg std::string title; 67706f2543Smrg DWORD exstyle; 68706f2543Smrg DWORD style; 69706f2543Smrg CBoundary bounds; 70706f2543Smrg HWND hwnd; 71706f2543Smrg HWND parent; 72706f2543Smrg WNDPROC owndproc; 73706f2543Smrg 74706f2543Smrg BOOL showing; 75706f2543Smrg 76706f2543Smrg protected: 77706f2543Smrg 78706f2543Smrg virtual const char *GetClassName(); 79706f2543Smrg virtual HWND CreateWindowHandle(); 80706f2543Smrg static LRESULT CALLBACK WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam); 81706f2543Smrg public: 82706f2543Smrg CWindow(const char *title); 83706f2543Smrg virtual void Create(); 84706f2543Smrg 85706f2543Smrg virtual int ShowModal(); 86706f2543Smrg 87706f2543Smrg void Show(); 88706f2543Smrg void Hide(); 89706f2543Smrg 90706f2543Smrg void SetWidth(int width); 91706f2543Smrg void SetHeight(int height); 92706f2543Smrg void SetLeft(int left); 93706f2543Smrg void SetTop(int top); 94706f2543Smrg int GetWidth() { return bounds.width; }; 95706f2543Smrg int GetHeight() { return bounds.height; }; 96706f2543Smrg int GetLeft() { return bounds.left; }; 97706f2543Smrg int GetTop() { return bounds.top; }; 98706f2543Smrg 99706f2543Smrg void SetBounds(int left, int top, int width, int height); 100706f2543Smrg void SetBounds(const RECT &rect); 101706f2543Smrg 102706f2543Smrg void SetStyle(DWORD style); 103706f2543Smrg DWORD GetStyle() { return style; }; 104706f2543Smrg 105706f2543Smrg void SetExStyle(DWORD exstyle); 106706f2543Smrg DWORD GetExStyle() { return exstyle; }; 107706f2543Smrg 108706f2543Smrg HWND GetHandle(); 109706f2543Smrg void SetParent(CWindow *window); 110706f2543Smrg 111706f2543Smrg virtual LRESULT Dispatch(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam); 112706f2543Smrg}; 113706f2543Smrg 114706f2543Smrg#endif 115