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;
}
Exemple #2
0
// 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);
}
Exemple #3
0
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);
}
Exemple #4
0
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 );

}