BayGUIリライト[3]
基本的に1アプリ1ウィンドウのつもりですが、ダイアログウィンドウはあると便利なので最初から考慮に入れることにします。
#include "baygui.h" static unsigned int color4bit[16] = { 0xFF000000, 0xFF800000, 0xFF008000, 0xFF808000, 0xFF000080, 0xFF800080, 0xFF008080, 0xFFC0C0C0, 0xFF808080, 0xFFFF0000, 0xFF00FF00, 0xFFFFFF00, 0xFF0000FF, 0xFFFF00FF, 0xFF00FFFF, 0xFFFFFFFF, }; static int point[16][2] = { { 196, 100 }, { 187, 61 }, { 164, 29 }, { 129, 9 }, { 90, 5 }, { 53, 17 }, { 23, 44 }, { 7, 81 }, { 7, 119 }, { 23, 156 }, { 53, 183 }, { 90, 195 }, { 129, 191 }, { 164, 171 }, { 187, 139 }, { 196, 100 } }; /** テスト用クラス */ class Test1 : public Frame, WindowListener { public: Test1(const char* title) { logprintf("%s:%s:%d\n", __FILE__, __FUNCTION__, __LINE__); this->title = new String(title); this->x = 10; this->y = 10; addWindowListener(this); } virtual ~Test1() { logprintf("%s:%s:%d\n", __FILE__, __FUNCTION__, __LINE__); } virtual void paint(Graphics *g) { logprintf("%s:%s:%d\n", __FILE__, __FUNCTION__, __LINE__); int i, j; g->setColor(0xff000000); g->fillRect(0, 0, 200, 200); for (i = 0; i <= 14; i++) { int x0, y0, dis; x0 = point[i][0]; y0 = point[i][1]; for (j = i + 1; j <= 15; j++) { dis = j - i; /* 2つの点の距離 */ if (dis >= 8) dis = 15 - dis; /* 逆回りに数える */ if (dis != 0) { g->setColor(color4bit[16 - dis]); g->drawLine(x0, y0, point[j][0], point[j][1]); } } } } virtual void windowActivated(WindowEvent* e) { logprintf("%s:%s:%d\n", __FILE__, __FUNCTION__, __LINE__); } virtual void windowClosed(WindowEvent* e) { logprintf("%s:%s:%d\n", __FILE__, __FUNCTION__, __LINE__); } virtual void windowDeactivated(WindowEvent* e) { logprintf("%s:%s:%d\n", __FILE__, __FUNCTION__, __LINE__); } /** ウィンドウが開いたときに呼ばれる */ virtual void windowOpened(WindowEvent* e) { printf("%s:%s:%d\n", __FILE__, __FUNCTION__, __LINE__); _P<Dialog> dialog; dialog = new Dialog(this, "Welcome"); dialog->repaint(); } }; int main(int argc, char *argv[]) { _P<Test1> test = new Test1("bball"); test->run(); return 0; }