/* --------------------------------------------------------------------- * TerminalNew * Create a terminal window * --------------------------------------------------------------------- */ CUIWINDOW* TerminalNew(CUIWINDOW* parent, const wchar_t* text, int x, int y, int w, int h, int id, int sflags, int cflags) { if (parent) { CUIWINDOW* terminal; int i; int col; int flags = sflags | CWS_TABSTOP | CWS_BORDER; flags &= ~(cflags); terminal = WindowNew(parent, x, y, w, h, flags); terminal->Class = _T("TERMINAL"); WindowSetId (terminal, id); WindowColScheme (terminal, _T("TERMINAL")); WindowSetNcPaintHook (terminal, TerminalNcPaintHook); WindowSetPaintHook (terminal, TerminalPaintHook); WindowSetKeyHook (terminal, TerminalKeyHook); WindowSetSetFocusHook (terminal, TerminalSetFocusHook); WindowSetKillFocusHook(terminal, TerminalKillFocusHook); WindowSetSizeHook (terminal, TerminalSizeHook); WindowSetTimerHook (terminal, TerminalTimerHook); WindowSetVScrollHook (terminal, TerminalVScrollHook); WindowSetDestroyHook (terminal, TerminalDestroyHook); WindowSetLayoutHook (terminal, TerminalLayoutHook); col = (terminal->Color.WndTxtColor << 4) + terminal->Color.WndColor; terminal->InstData = (TERMINALDATA*) malloc(sizeof(TERMINALDATA)); ((TERMINALDATA*)terminal->InstData)->SetFocusHook = NULL; ((TERMINALDATA*)terminal->InstData)->KillFocusHook = NULL; ((TERMINALDATA*)terminal->InstData)->PreKeyHook = NULL; ((TERMINALDATA*)terminal->InstData)->PostKeyHook = NULL; ((TERMINALDATA*)terminal->InstData)->CoProcExitHook = NULL; ((TERMINALDATA*)terminal->InstData)->FirstLine = 0; ((TERMINALDATA*)terminal->InstData)->YCursor = 0; ((TERMINALDATA*)terminal->InstData)->XCursor = 0; ((TERMINALDATA*)terminal->InstData)->InputState = STATE_NORMAL; ((TERMINALDATA*)terminal->InstData)->InputPos = 0; ((TERMINALDATA*)terminal->InstData)->CurAttr = col; ((TERMINALDATA*)terminal->InstData)->HasFocus = FALSE; ((TERMINALDATA*)terminal->InstData)->CoProc = NULL; for(i = 0; i < MAX_TERMLINES; i++) { ((TERMINALDATA*)terminal->InstData)->Lines[i] = (wchar_t*) malloc((MAX_TERMCOLS + 1) * sizeof(wchar_t)); ((TERMINALDATA*)terminal->InstData)->Colors[i] = (BYTE*) malloc((MAX_TERMCOLS + 1) * sizeof(BYTE)); wmemset(((TERMINALDATA*)terminal->InstData)->Lines[i],_T(' '),MAX_TERMCOLS); memset(((TERMINALDATA*)terminal->InstData)->Colors[i], col, MAX_TERMCOLS); } WindowSetText(terminal, text); return terminal; } return NULL; }
/* --------------------------------------------------------------------- * ShellDlgNew * Create a new dialog instance * --------------------------------------------------------------------- */ CUIWINDOW* ShellDlgNew(CUIWINDOW* parent, CUIRECT* rc, int sflags, int cflags) { if (parent) { CUIWINDOW* dlg; int flags = sflags | CWS_POPUP; flags &= ~(cflags | CWS_BORDER); dlg = WindowNew(parent, rc->X, rc->Y, rc->W, rc->H, flags); dlg->Class = _T("SHELL_DLG"); WindowColScheme(dlg, _T("TERMINAL")); WindowSetCreateHook(dlg, ShellDlgCreateHook); WindowSetDestroyHook(dlg, ShellDlgDestroyHook); WindowSetSizeHook(dlg, ShellDlgSizeHook); WindowSetKeyHook(dlg, ShellDlgKeyHook); dlg->InstData = (SHELLDLGDATA*) malloc(sizeof(SHELLDLGDATA)); ((SHELLDLGDATA*)dlg->InstData)->pCommand = NULL; ((SHELLDLGDATA*)dlg->InstData)->pTitle = NULL; ((SHELLDLGDATA*)dlg->InstData)->ExitCode = 0; ((SHELLDLGDATA*)dlg->InstData)->DoAutoClose = FALSE; return dlg; } return NULL; }
/* * call-seq: * new (display) -> Window, * new () -> Window * * Creates a new Window object. Can be called with * either one or zero arguments. The argument is * expected to be an object of the Display class. * If not provided, it will default to the default * Display. */ VALUE window_new(int argc, VALUE* argv, VALUE self) { Window_t* win; Display_t* d; switch(argc) { case 0: win = WindowNew(DisplayNew(getenv("DISPLAY"))); break; case 1: Data_Get_Struct(argv[0], Display_t, d); win = WindowNew(d); break; default: rb_raise(rb_eRuntimeError, "wrong number of arguments, %d for 0 or 1", argc); return self; } VALUE tdata = Data_Wrap_Struct(self, 0, WindowDispose, win); VALUE args[2]; args[0] = INT2FIX(800); args[1] = INT2FIX(600); rb_obj_call_init(tdata, 2, args); return tdata; }
/* --------------------------------------------------------------------- * ListboxNew * Create a list box dialog control * --------------------------------------------------------------------- */ CUIWINDOW* ListboxNew(CUIWINDOW* parent, const wchar_t* text, int x, int y, int w, int h, int id, int sflags, int cflags) { if (parent) { CUIWINDOW* listbox; int flags = sflags | CWS_TABSTOP | CWS_BORDER; flags &= ~(cflags); listbox = WindowNew(parent, x, y, w, h, flags); listbox->Class = _T("LISTBOX"); WindowSetId(listbox, id); WindowSetNcPaintHook(listbox, ListboxNcPaintHook); WindowSetPaintHook(listbox, ListboxPaintHook); WindowSetKeyHook(listbox, ListboxKeyHook); WindowSetSetFocusHook(listbox, ListboxSetFocusHook); WindowSetKillFocusHook(listbox, ListboxKillFocusHook); WindowSetMButtonHook(listbox, ListboxMButtonHook); WindowSetVScrollHook(listbox, ListboxVScrollHook); WindowSetSizeHook(listbox, ListboxSizeHook); WindowSetDestroyHook(listbox, ListboxDestroyHook); WindowEnableVScroll(listbox, TRUE); WindowSetLayoutHook(listbox, ListboxLayoutHook); listbox->InstData = (LISTBOXDATA*) malloc(sizeof(LISTBOXDATA)); ((LISTBOXDATA*)listbox->InstData)->SetFocusHook = NULL; ((LISTBOXDATA*)listbox->InstData)->KillFocusHook = NULL; ((LISTBOXDATA*)listbox->InstData)->PreKeyHook = NULL; ((LISTBOXDATA*)listbox->InstData)->PostKeyHook = NULL; ((LISTBOXDATA*)listbox->InstData)->LbChangedHook = NULL; ((LISTBOXDATA*)listbox->InstData)->LbChangingHook = NULL; ((LISTBOXDATA*)listbox->InstData)->LbClickedHook = NULL; ((LISTBOXDATA*)listbox->InstData)->NumItems = 0; ((LISTBOXDATA*)listbox->InstData)->SelIndex = -1; ((LISTBOXDATA*)listbox->InstData)->Sorted = ((flags & LB_SORTED) != 0); ((LISTBOXDATA*)listbox->InstData)->Descending = ((flags & LB_DESCENDING) != 0); ((LISTBOXDATA*)listbox->InstData)->FirstItem = NULL; ((LISTBOXDATA*)listbox->InstData)->LastItem = NULL; ((LISTBOXDATA*)listbox->InstData)->MouseDown = FALSE; WindowSetText(listbox, text); return listbox; } return NULL; }
/* --------------------------------------------------------------------- * ComboboxNew * Create the control * --------------------------------------------------------------------- */ CUIWINDOW* ComboboxNew(CUIWINDOW* parent, int x, int y, int w, int h, int id, int sflags, int cflags) { if (parent) { CUIWINDOW* combobox; int flags = sflags | CWS_TABSTOP; flags &= ~(cflags); combobox = WindowNew(parent, x, y, w, 1, flags); combobox->Class = _T("COMBOBOX"); WindowSetId(combobox, id); WindowSetPaintHook(combobox, ComboboxPaintHook); WindowSetKeyHook(combobox, ComboboxKeyHook); WindowSetDestroyHook(combobox, ComboboxDestroyHook); WindowSetSetFocusHook(combobox, ComboboxSetFocusHook); WindowSetKillFocusHook(combobox, ComboboxKillFocusHook); WindowSetMButtonHook(combobox, ComboboxMButtonHook); combobox->InstData = (COMBOBOXDATA*) malloc(sizeof(COMBOBOXDATA)); ((COMBOBOXDATA*)combobox->InstData)->Height = h; ((COMBOBOXDATA*)combobox->InstData)->SetFocusHook = NULL; ((COMBOBOXDATA*)combobox->InstData)->KillFocusHook = NULL; ((COMBOBOXDATA*)combobox->InstData)->PreKeyHook = NULL; ((COMBOBOXDATA*)combobox->InstData)->PostKeyHook = NULL; ((COMBOBOXDATA*)combobox->InstData)->CbChangedHook = NULL; ((COMBOBOXDATA*)combobox->InstData)->CbChangingHook = NULL; ((COMBOBOXDATA*)combobox->InstData)->NumItems = 0; ((COMBOBOXDATA*)combobox->InstData)->SelIndex = -1; ((COMBOBOXDATA*)combobox->InstData)->CtrlSelIndex = -1; ((COMBOBOXDATA*)combobox->InstData)->Sorted = ((flags & LB_SORTED) != 0); ((COMBOBOXDATA*)combobox->InstData)->Descending = ((flags & LB_DESCENDING) != 0); ((COMBOBOXDATA*)combobox->InstData)->FirstItem = NULL; ((COMBOBOXDATA*)combobox->InstData)->LastItem = NULL; ((COMBOBOXDATA*)combobox->InstData)->MouseDown = FALSE; ((COMBOBOXDATA*)combobox->InstData)->DropdownState = FALSE; ((COMBOBOXDATA*)combobox->InstData)->Ctrl = combobox; return combobox; } return NULL; }
/* --------------------------------------------------------------------- * PasswddlgNew * Create a new dialog instance * --------------------------------------------------------------------- */ CUIWINDOW* PasswddlgNew(CUIWINDOW* parent, const wchar_t* title, int sflags, int cflags) { if (parent) { CUIWINDOW* dlg; int flags = sflags | CWS_POPUP | CWS_BORDER | CWS_CENTERED; flags &= ~(cflags); dlg = WindowNew(parent, 0, 0, 51, 10, flags); dlg->Class = _T("PASSWD_DLG"); WindowColScheme(dlg, _T("DIALOG")); WindowSetCreateHook(dlg, PasswddlgCreateHook); WindowSetDestroyHook(dlg, PasswddlgDestroyHook); dlg->InstData = (PASSWDDLGDATA*) malloc(sizeof(PASSWDDLGDATA)); ((PASSWDDLGDATA*)dlg->InstData)->Password[0] = 0; WindowSetText(dlg, title); return dlg; } return NULL; }
// Program Entry (WinMain) //int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) int main() { HINSTANCE hInstance = NULL; application_t *app; // = ApplicationNew("OpenGL", hInstance); application_t *app2; // = ApplicationNew("OpenGL 2", hInstance); gl_window_t *win1, *win2; app = ApplicationNew("OpenGL", hInstance); app2 = ApplicationNew("OpenGL 2", hInstance); start: // left, top, width, height char title[1024]; sprintf(title, "system metrics: %dx%d", GetSystemMetrics(SM_CXSCREEN), GetSystemMetrics(SM_CYSCREEN)); win1 = WindowNew(app, title, 100, 100, 1024, 768, MyInitialize, MyDeinitialize, MyUpdate, MyDraw); if ( ! win1->isCreated) { MessageBox (HWND_DESKTOP, "Error Creating OpenGL Window", "Error", MB_OK | MB_ICONEXCLAMATION); return -1; } win2 = WindowNew(app2, title, 100, 100, 1024, 768, MyInitialize, MyDeinitialize, MyUpdate, MyDraw); if ( ! win2->isCreated) { MessageBox (HWND_DESKTOP, "Error Creating OpenGL Window", "Error", MB_OK | MB_ICONEXCLAMATION); return -1; } // Ask The User If They Want To Start In FullScreen Mode? (Remove These 4 Lines If You Want To Force Fullscreen) //if (MessageBox (HWND_DESKTOP, "Would You Like To Run In Fullscreen Mode?", "Start FullScreen?", MB_YESNO | MB_ICONQUESTION) == IDNO) //{ // window.init.isFullScreen = FALSE; // If Not, Run In Windowed Mode //} WindowInit(win1); WindowInit(win2); int quitcounter = 0; while (1) { if (! win1->quit) { WindowUpdate(win1); WindowDraw(win1); WindowMessageLoop(win1); } if (! win2->quit) { WindowUpdate(win2); WindowDraw(win2); WindowMessageLoop(win2); } if (win1->quit && win2->quit) break; } goto start; ApplicationClose(app); ApplicationClose(app2); return 0; }
/* --------------------------------------------------------------------- * ComboboxShowDropdown * Display dropdown window * --------------------------------------------------------------------- */ static void ComboboxShowDropdown(CUIWINDOW* win, COMBOBOXDATA* data, int capture) { CUIWINDOW* listbox; CUIRECT rc; int height; WindowGetWindowRect(win, &rc); height = ((data->NumItems + 2) > data->Height) ? data->Height : (data->NumItems + 2); if ((LINES - rc.Y) > height) { listbox = WindowNew(win, rc.X, rc.Y + 1, rc.W, height, CWS_POPUP | CWS_BORDER | CWS_TABSTOP); } else if (rc.Y > (LINES / 2)) { if (height > (rc.Y - 1)) { height = rc.Y - 1; } listbox = WindowNew(win, rc.X, rc.Y - height - 1, rc.W, height, CWS_POPUP | CWS_BORDER | CWS_TABSTOP); } else { if (height > (LINES - rc.Y - 1)) { height = LINES - rc.Y - 1; } listbox = WindowNew(win, rc.X, rc.Y + 1, rc.W, height, CWS_POPUP | CWS_BORDER | CWS_TABSTOP); } listbox->Class = _T("CBDROPDOWN"); WindowSetPaintHook(listbox, CbDropdownPaintHook); WindowSetKeyHook(listbox, CbDropdownKeyHook); WindowSetMButtonHook(listbox, CbDropdownMButtonHook); WindowSetVScrollHook(listbox, CbDropdownVScrollHook); WindowSetSizeHook(listbox, CbDropdownSizeHook); WindowSetSetFocusHook(listbox, CbDropdownSetFocusHook); WindowSetKillFocusHook(listbox, CbDropdownKillFocusHook); WindowEnableVScroll(listbox, TRUE); listbox->InstData = (void*) data; data->SelIndex = data->CtrlSelIndex; data->MouseDown = capture; data->DropdownState = TRUE; data->CloseKey = 0; if (height > 0) { WindowCreate(listbox); if (capture) { WindowSetCapture(listbox); } WindowModal(listbox); WindowReleaseCapture(); } WindowDestroy(listbox); data->DropdownState = FALSE; ComboboxUpdate(win); switch(data->CloseKey) { case KEY_TAB: case KEY_RIGHT: WindowFocusNext(win->Parent); break; case KEY_LEFT: WindowFocusPrevious(win->Parent); break; } }