URL
https://opencores.org/ocsvn/openrisc/openrisc/trunk
Subversion Repositories openrisc
[/] [openrisc/] [trunk/] [rtos/] [ecos-2.0/] [packages/] [services/] [gfx/] [mw/] [v2_0/] [include/] [microwin/] [mwobjects.h] - Rev 174
Compare with Previous | Blame | View Log
/* Copyright (C) Chris Johns (ccj@acm.org) MicroWindows C++ Wrappers. */ #if !defined (_MWOBJECTS_H_) #define _MWOBJECTS_H_ extern "C" { #include "windows.h" #include "wintern.h" #include "graph3d.h" }; #include <set> #include <iostream> namespace MicroWindowsObjects { class FileDescriptor; // // Manage Window Classes. Notice you do not need to specify // a Window Procedure function pointer. This is handled for // you. // class WindowClass { public: WindowClass (); WindowClass (LPCSTR lpszClassName, UINT style = CS_DBLCLKS | CS_VREDRAW | CS_HREDRAW, int cbClsExtra = 0, int cbWndExtra = 0, HINSTANCE hInstance = 0, HICON hIcon = 0, HCURSOR hCursor = 0, HBRUSH hbrBackground = 0, LPCSTR lpszMenuName = 0); void set_style (UINT style) { wclass.style = style; } void set_class_extra (int cbClsExtra) { wclass.cbClsExtra = cbClsExtra; } void set_window_extra (int cbWndExtra) { wclass.cbWndExtra = cbWndExtra; } void set_instance (HINSTANCE hInstance) { wclass.hInstance = hInstance; } void set_icon (HICON hIcon) { wclass.hIcon = hIcon; } void set_cursor (HCURSOR hCursor) { wclass.hCursor = hCursor; } void set_background (HBRUSH hbrBackground) { wclass.hbrBackground = hbrBackground; } void set_menu_name (LPCSTR lpszMenuName) { wclass.lpszMenuName = lpszMenuName; } ATOM register_class (); private: // // This variable is a local copy which is // registered. After that is class does little. // WNDCLASS wclass; }; class Window { friend WindowClass; public: Window (); Window (DWORD dwExStyle, LPCSTR lpClassName, LPCSTR lpWindowName, DWORD dwStyle, int x, int y, int nWidth, int nHeight, HWND hwndParent, HMENU hMenu, HINSTANCE hInstance, LPVOID lpParam); virtual ~Window (); HWND create (DWORD dwExStyle, LPCSTR lpClassName, LPCSTR lpWindowName, DWORD dwStyle, int x, int y, int nWidth, int nHeight, HWND hwndParent, HMENU hMenu, HINSTANCE hInstance, LPVOID lpParam); BOOL destory (); HWND get_handle () const { return hwnd; } operator HWND () const { return get_handle (); } BOOL is_visible () { return IsWindowVisible (hwnd); } BOOL show (int nCmdShow) { return ::ShowWindow (hwnd, nCmdShow); } BOOL update () { return ::UpdateWindow (hwnd); } BOOL invalidate_rect (CONST RECT *lpRect, BOOL bErase) { return ::InvalidateRect (hwnd, lpRect, bErase); } HWND get_focus () { return ::GetFocus (); } HWND set_focus () { return ::SetFocus (hwnd); } BOOL move (int x, int y, int nWidth, int nHeight, BOOL bRepaint) { return MoveWindow (hwnd, x, y, nWidth, nHeight, bRepaint); } // FIXME: Should these be here ? BOOL client_to_screen (LPPOINT lpPoint) { return ::ClientToScreen (hwnd, lpPoint); } BOOL screen_to_client (LPPOINT lpPoint) { return ::ClientToScreen (hwnd, lpPoint); } LONG get_long (int nIndex) { return ::GetWindowLong (hwnd, nIndex); } LONG set_long (int nIndex, LONG wNewLong) { return ::SetWindowWord (hwnd, nIndex, wNewLong); } WORD get_word (int nIndex) { return ::GetWindowWord (hwnd, nIndex); } WORD set_word (int nIndex, WORD wNewWord) { return ::SetWindowWord (hwnd, nIndex, wNewWord); } DWORD get_class_long (int nIndex) { return ::GetClassLong (hwnd, nIndex); } int get_text (LPSTR lpString, int nMaxCount) { return GetWindowText (hwnd, lpString, nMaxCount); } BOOL set_text (LPCSTR lpString) { return SetWindowText (hwnd, lpString); } // // File Descriptor handlers. // virtual bool attach (const int fd, FileDescriptor& file_descriptor); virtual bool detach (FileDescriptor& file_descriptor); protected: // // The message handler. Insure you call this class's default // handler for default message handling so any special // filtering can occur. // virtual LRESULT message_handler (UINT msg, WPARAM wParam, LPARAM lParam); private: // // We only need one WndProc. // static LRESULT CALLBACK WndProc (HWND hwnd, UINT msg, WPARAM wp, LPARAM lp); HWND hwnd; LPVOID lpCreateParams; // // Set of FileDescriptor objects // struct ltint { bool operator() (const FileDescriptor* f1, const FileDescriptor* f2) const; }; set<FileDescriptor*, ltint> file_descriptors; }; class Rect { public: Rect () { empty (); } Rect (int xLeft, int yTop, int xRight, int yBottom) { set (xLeft, yTop, xRight, yBottom); } Rect (HWND hwnd) { get_window (hwnd); } BOOL get_window (HWND hwnd) { return GetWindowRect (hwnd, &rect); } BOOL get_client (HWND hwnd) { return GetClientRect (hwnd, &rect); } BOOL set (int xLeft, int yTop, int xRight, int yBottom) { return ::SetRect (&rect, xLeft, yTop, xRight, yBottom); } BOOL empty () { return ::SetRectEmpty (&rect); } Rect& operator= (const Rect& other) { CopyRect (&rect, &other.rect); return *this; } operator bool () const { return ::IsRectEmpty (&rect); } operator RECT* () { return ▭ } BOOL copy (LPRECT lpRectDst) { return ::CopyRect (lpRectDst, &rect); } BOOL inflate (int dx, int dy) { return ::InflateRect (&rect, dx, dy); } BOOL offset (int dx, int dy) { return ::OffsetRect (&rect, dx, dy); } BOOL point_inside (POINT Point) { return PtInRect (&rect, Point); } MWCOORD left () const { return rect.left; } MWCOORD top () const { return rect.top; } MWCOORD right () const { return rect.right; } MWCOORD bottom () const { return rect.bottom; } private: RECT rect; }; inline ostream& operator<< (ostream& s, const Rect& r) { s << "rect" << "(l=" << r.left () << ",t=" << r.top () << ",r=" << r.right () << ",b=" << r.bottom () << ")"; return s; } // // Generic Paint class. Try to help the paint message. // class Paint { public: enum { TEXT_BUF_SIZE = 512 }; Paint (HWND hwnd); Paint (HWND hwnd, LPARAM lpParam); virtual ~Paint (); // // These begin and end a paint session. // void begin (bool init_3d = false, bool draw_3d_in_memory = false); void end (); // // Aspects of the client paint area under our control. // operator HWND () { return hwnd; } operator RECT* () { return r; } operator HDC () { return hdc; } operator PAINTSTRUCT* () { return &ps; } operator POINT* () { return &pt; } GDICOORD get_point_x () const { return pt.x; } GDICOORD get_point_y () const { return pt.y; } MWCOORD left () const { return r.left (); } MWCOORD top () const { return r.top (); } MWCOORD right () const { return r.right (); } MWCOORD bottom () const { return r.bottom (); } // // Colour Control. // DWORD get_system_colour (int nIndex) { return ::GetSysColor (nIndex); } // // Pixel, line and rectange draw support. // COLORREF set_pixel (int x, int y, COLORREF crColour) { return ::SetPixel (hdc, x, y, crColour); } BOOL move_to (int x, int y) { return ::MoveToEx (hdc, x, y, 0); } BOOL line_to (int x, int y) { return ::LineTo (hdc, x, y); } BOOL line_to (int x1, int y1, int x2, int y2) { if (!move_to (x1, y1)) return FALSE; return line_to (x2, y2); } BOOL rectangle (int x1, int y1, int x2, int y2) { return ::Rectangle (hdc, x1, y1, x2, y2); } BOOL fill_rectangle (int x1, int y1, int x2, int y2, HBRUSH hbr) { Rect r (x1, y1, x2, y2); return ::FillRect (hdc, r, hbr); } // // Paint any 3d objects. // void initialise_3d (bool draw_3d_in_mem) { if (!draw_3d) { draw_3d = true; ::init3 (hdc, draw_3d_in_mem ? hwnd : 0); } } void paint_3d () { if (draw_3d) { ::paint3 (hdc); draw_3d = false; } } // // Text Output. // void set_text_fromat (UINT uFormat) { text_format = uFormat; } int text_out (int x, int y, const char *format, ...); private: HWND hwnd; bool draw_3d; bool drawing; Rect r; HDC hdc; PAINTSTRUCT ps; POINT pt; UINT text_format; char format_buf[TEXT_BUF_SIZE]; }; // // FileDescriptor handles fd event from the User Registered File // Descriptor support. // class FileDescriptor { friend class Window; public: FileDescriptor (); virtual ~FileDescriptor (); // // Enable/disable controls. // bool enable_read (); bool disable_read (); bool read_enabled () const { return read_is_enabled; } bool enable_write (); bool disable_write (); bool write_enabled () const { return write_is_enabled; } bool enable_except (); bool disable_except (); bool except_enabled () const { return except_is_enabled; } int fd () const { return file_desc; } operator int () const { return fd (); } const Window *get_window () const { return window; } protected: // // These are called in responce to user fd messages to the window. // virtual LRESULT read (); virtual LRESULT write (); virtual LRESULT except (); private: int file_desc; bool read_is_enabled; bool write_is_enabled; bool except_is_enabled; Window *window; }; class Application { public: Application (); Application (MWIMAGEHDR& background); virtual ~Application (); HINSTANCE instance () const { return app_instance; } HINSTANCE prev_instance () const { return app_prev_instance; } LPSTR cmd_line () const { return app_cmd_line; } int show_cmd () { return app_show_cmd; } // // This is called the public C linkage WinMain. Do not call. // static int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd); protected: virtual int initialise (); virtual int shutdown (); private: MWIMAGEHDR *background; HINSTANCE app_instance; HINSTANCE app_prev_instance; LPSTR app_cmd_line; int app_show_cmd; }; } #endif