bool ActiveXControlComponent::createControl (const void* controlIID) { deleteControl(); if (auto* peer = getPeer()) { auto controlBounds = peer->getAreaCoveredBy (*this); auto hwnd = (HWND) peer->getNativeHandle(); std::unique_ptr<Pimpl> newControl (new Pimpl (hwnd, *this)); HRESULT hr = OleCreate (*(const IID*) controlIID, __uuidof (IOleObject), 1 /*OLERENDER_DRAW*/, 0, newControl->clientSite, newControl->storage, (void**) &(newControl->control)); if (hr == S_OK) { newControl->control->SetHostNames (L"JUCE", 0); if (OleSetContainedObject (newControl->control, TRUE) == S_OK) { RECT rect; rect.left = controlBounds.getX(); rect.top = controlBounds.getY(); rect.right = controlBounds.getRight(); rect.bottom = controlBounds.getBottom(); if (newControl->control->DoVerb (OLEIVERB_SHOW, 0, newControl->clientSite, 0, hwnd, &rect) == S_OK) { control.reset (newControl.release()); control->controlHWND = ActiveXHelpers::getHWND (this); if (control->controlHWND != 0) { control->setControlBounds (controlBounds); control->originalWndProc = (WNDPROC) GetWindowLongPtr ((HWND) control->controlHWND, GWLP_WNDPROC); SetWindowLongPtr ((HWND) control->controlHWND, GWLP_WNDPROC, (LONG_PTR) Pimpl::activeXHookWndProc); } return true; } } } } else { // the component must have already been added to a real window when you call this! jassertfalse; } return false; }
// Calendar render creation routines void createCalendar() { clearControls(); registerScreenUpdate(calendarUpdateScreen, NULL); registerHelpScreen("calendar.html", true); addHome(l_home, exitCalendar); addDefaultButtons(l_editreminder, calendarForward, l_viewday, calendarBack); addDefaultLR(l_prev, calendarPreviousDay, l_next, calendarNextDay); newControl(0xFF, 23, 57, 233, 160, CT_HITBOX, NULL); setControlCallbacks(0xFF, calendarClick, NULL, NULL); // for dpad addHotKey(0, KEY_UP, calendarMoveCursor, 0, NULL); addHotKey(1, KEY_DOWN, calendarMoveCursor, 0, NULL); addHotKey(2, KEY_LEFT, calendarMoveCursor, 0, NULL); addHotKey(3, KEY_RIGHT, calendarMoveCursor, 0, NULL); }
void initAbout() { setEncoding(CHARSET_ASCII, &aboutData); setHTMLWidth(ABOUT_HELP_WIDTH, &aboutData); setContent(TYPE_HTML, &aboutData); abScreen = (char *)trackMalloc(strlen((char *)about_html)+1, "temp about"); memcpy(abScreen, about_html, strlen((char *)about_html)+1); loadHTMLFromMemory(abScreen, &aboutData); clearControls(); registerScreenUpdate(drawAboutScreen, freeAbout); registerHelpScreen(NULL, true); newControl(0xFF, 32, 70, 244, 79, CT_HITBOX, NULL); setControlCallbacks(0xFF, loadBrowser, NULL, NULL); addHotKey(0xF0, KEY_START, exitAbout, 0, NULL); }
void initSound() { firstTime = true; soundLoaded = false; if(getFileType(getFileName()) == SOUNDFILE) { addToRandomList(getFileName(), getCursor()); } clearControls(); registerScreenUpdate(soundUpdateScreen, NULL); registerHelpScreen("sound.html", true); addHome(l_hold, toggleHold); setControlGrayed(CONTROL_HOME, !hold); addDefaultLR(NULL, getPrevSound, NULL, getNextSound); addHotKey(0xF0, KEY_L, getPrevSound, 0, NULL); addHotKey(0xF1, KEY_R, getNextSound, 0, NULL); addDefaultButtons(l_pause, togglePause, l_back, exitSound); // for dpad addHotKey(0, KEY_UP, volumeUp, 0, NULL); addHotKey(1, KEY_DOWN, volumeDown, 0, NULL); addHotKey(2, KEY_LEFT, soundPrevTrack, 0, NULL); addHotKey(3, KEY_RIGHT, soundNextTrack, 0, NULL); addHotKey(4, KEY_X, switchSoundMode, 0, NULL); // for seek bar newControl(0xFF, 10, 20, 244, 40, CT_HITBOX, NULL); setControlCallbacks(0xFF, seekSound, NULL, NULL); setControlAbsoluteCoords(0xFF, true); }
void initTracker() { float colors[][3] = { { 1.0, 0.0, 0.0 }, { 1.0, 1.0, 1.0 }, { 1.0, 0.5, 0.5} , { .4, 0.9, .4 }}; ColDef *colDefs; int x, y, h; //draw Title h = game->screen->vp_h / (24 * 1.5); glShadeModel(GL_FLAT); glDisable(GL_BLEND); glDisable(GL_LIGHTING); glDisable(GL_DEPTH_TEST); trackeruse=1; if( tracker.trackerControls != NULL ) return; if( tracker.serverlist != NULL ) return; tracker.trackerControls = newRootControl(); //The server list colDefs = new_colDefs( 4 ); set_colDef( colDefs, 0, "Address", 30, colors[1], drawit, addressToStr, NULL); set_colDef( colDefs, 1, "Description", 40, colors[1], drawit, charToStr_wlist, NULL); set_colDef( colDefs, 2, "Players", 20, colors[1], drawit, intToStr_wlist, NULL); set_colDef( colDefs, 3, "Ping", 10, colors[3], drawit, intToStr_wlist, sortint_wlist); tracker.serverlist = new_wlist(10, 60,game->screen->vp_w-30, game->screen->vp_h-100, 16, 4, colDefs, 3, cWlistDefaultOptions, NULL, action, mousefocus ); newControl(tracker.trackerControls, (Wptr)tracker.serverlist, Wlistbox); //A scrollbar to scroll in the list // tracker.listscroll = new_wscrollbar(game->screen->vp_w-15, 70, 10, game->screen->vp_h-140, 0, 15, scrollList); // newControl(tracker.trackerControls, (Wptr)tracker.listscroll, WscrollBar); //A static text showing number of servers x = game->screen->vp_w/2 - 1.5 * 12 *( game->screen->vp_w / (50 * 1.5) ); y = 1.5 * h; tracker.servertext = new_wstatictext( x, y, 1.5 * 24 *( game->screen->vp_w / (50 * 1.5)), h+2, "Loading servers list ...", h, netFont, colors[1]); newControl(tracker.trackerControls, (Wptr)tracker.servertext, WstaticText); //a button for testing newControl(tracker.trackerControls, (Wptr)new_wbutton(game->screen->vp_w/2-40, 40, 80, 15, "Refresh", NULL, buttonaction, NULL, buttonMouseFocus), WcontrolButton); //title x = game->screen->vp_w/2 - 1.5 * 7 *( game->screen->vp_w / (50 * 1.5) ); y = game->screen->vp_h - 1.5 * h; newControl(tracker.trackerControls, (Wptr)new_wstatictext( x, y, 1.5 * 14 *( game->screen->vp_w / (50 * 1.5)), h+5, "GLTRON SERVERS", h+3, gameFont, colors[0]), WstaticText); setCurrentControl( tracker.trackerControls, (Wptr)tracker.serverlist ); }