📄 mwo-test.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 + -