⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mwo-test.cc

📁 一个嵌入式操作系统(microwindows)的源代码
💻 CC
字号:
/* * Copyright (c) 1999 Greg Haerr <greg@censoft.com> * * Demo program for Micro-Windows */#define MWINCLUDECOLORS#include <mwobjects.h>#include <iostream>extern MWIMAGEHDR image_microwin;extern MWIMAGEHDR image_zion208;PMWIMAGEHDR image  = &image_zion208;using namespace MicroWindowsObjects;class TestWindowClass  : public WindowClass{public:    TestWindowClass (LPCSTR lpszClassName);    };class TestChildWindow  : public Window{public:  TestChildWindow ();    HWND create (LPCSTR lpszClassName,               HWND parent,                int x, int y,                int nWidth, int nHeight);    void set_trace (bool t)     { trace = t; }  protected:  virtual LRESULT message_handler (UINT   msg,                                   WPARAM wParam,                                   LPARAM lParam);private:    bool trace;  };class TestWindow  : public Window{public:  TestWindow (LPCSTR lpszClassName, bool trace = false);  private:    bool            trace;  Window          button;  TestChildWindow image[3];  };class Test3dWindow  : public Window{public:  Test3dWindow (LPCSTR lpszChild);protected:  virtual LRESULT message_handler (UINT   msg,                                   WPARAM wParam,                                   LPARAM lParam);private:  vec1 gx;  vec1 gy;    vec1 last_gx;  vec1 last_gy;  };class TestRoseWindow  : public TestWindow{public:  TestRoseWindow (LPCSTR lpszClassName, bool trace = false);  protected:  virtual LRESULT message_handler (UINT   msg,                                   WPARAM wParam,                                   LPARAM lParam);};class TestCircleWindow  : public TestWindow{public:  TestCircleWindow (LPCSTR lpszClassName, bool trace = false);  protected:  virtual LRESULT message_handler (UINT   msg,                                   WPARAM wParam,                                   LPARAM lParam);};class TestDaisyWindow  : public TestWindow{public:  TestDaisyWindow (LPCSTR lpszClass, bool trace = false);  protected:  virtual LRESULT message_handler (UINT   msg,                                   WPARAM wParam,                                   LPARAM lParam);};class TestFileDescriptor  : public FileDescriptor{public:    void do_fd_test ();  protected:  LRESULT read ();  LRESULT write ();  LRESULT except ();};class TestApplication  : public Application{  enum { GROUPS = 2 };  public:  TestApplication ();  protected:  virtual int initialise ();  virtual int shutdown ();  private:  TestWindowClass    main_class;  Test3dWindow       *t3d [GROUPS];  TestRoseWindow     *tr [GROUPS];  TestCircleWindow   *tc [GROUPS];  TestDaisyWindow    *td [GROUPS];  TestFileDescriptor *fd;  };TestWindowClass::TestWindowClass (LPCSTR lpszClassName)  : WindowClass (lpszClassName,                 CS_DBLCLKS | CS_VREDRAW | CS_HREDRAW){  set_background ((HBRUSH) GetStockObject (LTGRAY_BRUSH));}TestChildWindow::TestChildWindow (){}HWNDTestChildWindow::create (LPCSTR lpszClassName,                         HWND parent,                          int x, int y,                          int nWidth, int nHeight){  return Window::create (0,                         lpszClassName,                          "",                          WS_BORDER | WS_CHILD | WS_VISIBLE,                         x, y, nWidth, nHeight,                         parent, 0, 0, 0);}LRESULTTestChildWindow::message_handler (UINT   msg,                                  WPARAM wParam,                                  LPARAM lParam){  Paint paint (*this);  switch (msg)   {    case WM_PAINT:      paint.begin ();      DrawDIB (paint, paint.left (), paint.top (), image);      paint.end ();      break;    default:      return Window::message_handler (msg, wParam, lParam);  }  return 0;}TestWindow::TestWindow (LPCSTR lpszClassName, bool trace)  : trace (trace){  Rect rc (GetDesktopWindow ());  int  width;  int  height;   width = height = rc.right () / 2;    if (trace)    cout << "create: hwnd=" << get_handle ()         << " " << rc << endl;  create (0, lpszClassName, "Micro C++ Application",          WS_OVERLAPPEDWINDOW | WS_VISIBLE,          CW_USEDEFAULT, CW_USEDEFAULT,          width, height,          0, 0, 0, 0);    button.create (0, "BUTTON", "Ok",                 WS_CHILD | WS_VISIBLE,                 width * 5 / 8, 10, 50, 14,                 *this, 0, 0, 0);  image[0].create (lpszClassName, *this,                    4, 4,                    width / 3, height / 3);  image[1].create (lpszClassName, *this,                    width / 3, height / 3,                    width / 3, height / 3);  image[2].create (lpszClassName, *this,                    width * 3 / 5, height * 3 / 5,                    width * 2 / 3, height * 2 / 3);  image[0].set_trace (trace);  image[1].set_trace (trace);  image[2].set_trace (trace);}Test3dWindow::Test3dWindow (LPCSTR lpszClassName)  : gx (0),    gy (0),    last_gx (0),    last_gy (0){  Rect rect (GetDesktopWindow ());  int  width;  int  height;   width = height = rect.right () / 2;    create (0, lpszClassName, "Micro C++ Application",          WS_OVERLAPPEDWINDOW | WS_VISIBLE,          CW_USEDEFAULT, CW_USEDEFAULT,          width, height,          0, 0, 0, 0);}LRESULTTest3dWindow::message_handler (UINT   msg,                               WPARAM wParam,                               LPARAM lParam){  Paint paint (*this, lParam);  Rect  rc;   switch (msg)   {    case WM_PAINT:      paint.begin (true);      look3 (-2 * gx, -2 * gy, 1.2);      drawgrid (-8.0, 8.0, 10, -8.0, 8.0, 10);      last_gx = gx;      last_gy = gy;            paint.end ();      break;    case WM_MOUSEMOVE:      rc.get_client (*this);      gx = (vec1) paint.get_point_x () / rc.right ();      gy = (vec1) paint.get_point_y () / rc.bottom ();      if (gx > last_gx || gy > last_gy)        invalidate_rect (0, FALSE);      break;    default:      return Window::message_handler (msg, wParam, lParam);  }  return 0;}TestRoseWindow::TestRoseWindow (LPCSTR lpszClassName, bool trace)  : TestWindow (lpszClassName, trace){}LRESULTTestRoseWindow::message_handler (UINT   msg,                                 WPARAM wParam,                                 LPARAM lParam){  Paint paint (*this);    switch (msg)   {    case WM_PAINT:      paint.begin (true);            rose (1.0, 7, 13);      paint.end ();      break;    default:      return Window::message_handler (msg, wParam, lParam);  }  return 0;}TestCircleWindow::TestCircleWindow (LPCSTR lpszClassName, bool trace)  : TestWindow (lpszClassName, trace){}LRESULTTestCircleWindow::message_handler (UINT   msg,                                   WPARAM wParam,                                   LPARAM lParam){  Paint paint (*this);    switch (msg)   {    case WM_PAINT:      paint.begin (true);            setcolor3 (BLACK);      circle3 (1.0);      paint.end ();      break;    default:      return Window::message_handler (msg, wParam, lParam);  }  return 0;}TestDaisyWindow::TestDaisyWindow (LPCSTR lpszClassName, bool trace)  : TestWindow (lpszClassName, trace){}LRESULTTestDaisyWindow::message_handler (UINT   msg,                                  WPARAM wParam,                                  LPARAM lParam){  Paint paint (*this);    switch (msg)   {    case WM_PAINT:      paint.begin (true);            setcolor3 (BLUE);      daisy (1.0, 20);      paint.paint_3d ();            paint.text_out (10, 250, "Date built : %s", __DATE__);            paint.end ();      break;          case WM_LBUTTONDOWN:      cout << "left down : " << *this << endl;      SendMessage (*this, WM_FDINPUT, 200, 0);      return Window::message_handler (msg, wParam, lParam);      break;          case WM_RBUTTONDOWN:      cout << "right down : " << *this << endl;      SendMessage (*this, WM_FDOUTPUT, 200, 0);      return Window::message_handler (msg, wParam, lParam);      break;          case WM_LBUTTONDBLCLK:      cout << "double left : " << *this << endl;      SendMessage (*this, WM_FDEXCEPT, 200, 0);      return Window::message_handler (msg, wParam, lParam);      break;          default:      return Window::message_handler (msg, wParam, lParam);  }  return 0;}void TestFileDescriptor::do_fd_test (){}LRESULTTestFileDescriptor::read (){  cout << "test read fd for `" << *get_window () << "' and fd " << *this << endl;  return 0;  }LRESULTTestFileDescriptor::write (){  cout << "test write fd for `" << *get_window () << "' and fd " << *this << endl;  return 0;  }LRESULTTestFileDescriptor::except (){  cout << "test except fd for `" << *get_window () << "' and fd " << *this << endl;  return 0;  }TestApplication::TestApplication ()  : Application (image_microwin),    main_class ("test"){  for (int i = 0; i < GROUPS; i++)  {    t3d [i] = 0;    tr [i] = 0;    tc [i] = 0;    td [i] = 0;  }}intTestApplication::initialise (){  main_class.register_class ();  for (int i = 0; i < GROUPS; i++)  {    t3d [i] = new Test3dWindow ("test");    tr [i] = new TestRoseWindow ("test");    tc [i] = new TestCircleWindow ("test");    td [i] = new TestDaisyWindow ("test");  }  fd = new TestFileDescriptor ();    cout << "attach to " << *td[GROUPS - 1] << endl;    td[GROUPS - 1]->attach (200, *fd);    return 0;}intTestApplication::shutdown (){  for (int i = 0; i < GROUPS; i++)  {    if (t3d [i])      delete t3d [i];    t3d [i] = 0;        if (tr [i])      delete tr [i];    tr [i] = 0;        if (tc [i])      delete tc [i];    tc [i] = 0;        if (td [i])      delete td [i];    td [i] = 0;  }    return 0;}TestApplication test_application;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -